在Windows x64中运行Cython - 致命错误C1083:无法打开包含文件:'basetsd.h':没有这样的文件或目录

时间:2014-05-16 02:08:02

标签: python windows python-2.7 cython python-extensions

我一直在尝试在我的Window 7系统上安装Cython for Python 2.7。特别是,我更喜欢64位的所有内容。 (如果你想知道,我需要Cython,因为Cython是我需要另一个软件包进行专门数值分析所需的组件之一。而x64可能是存储大型数据集的一个优势。)

所以我从官方网站下载了x64 Python 2.7。从Christoph Gohlke获得了Cython。当然,Python 2.7的amd64版本。在安装之前,我使用Joe DF's answer here中的.reg文件将Python 2.7添加到注册表中。之后,我安装了来自here的Visual C ++编译器(我认为它不起作用)和here(但这个应该是)。此时,我的C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin目录中有vcvars32.batvcvars64.batvcvars86_amd64.batvcvarsx86_ia64.bat。我跑vcvars64.bat并且没有错误消息。

随后,我跟着this page创建了一个“hello world”测试文件。

然后,我收到了这个错误。

...\Tests>python setup.py build_ext --inplace
running build_ext
building 'hello' extension
error: Unable to find vcvarsall.bat

所以我心想:嗯,Cython找不到那个文件,因为它不存在。 (我搜索了我的整个硬盘。)所以我将vcvars64.bat...\VC\bin复制到\VC并将名称更改为vcvarsall.bat。现在vcvarsall错误消失了。而且......自然会出现一个新的错误。

...\Tests>python setup.py build_ext --inplace
running build_ext
building 'hello' extension
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64\cl.exe /c /nolog
o /Ox /MD /W3 /GS- /DNDEBUG -IC:\Python27\include -IC:\Python27\PC /Tchello.c /F
obuild\temp.win-amd64-2.7\Release\hello.obj
hello.c
C:\Python27\include\pyconfig.h(227) : fatal error C1083: Cannot open include fil
e: 'basetsd.h': No such file or directory
error: command '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64
\cl.exe"' failed with exit status 2

现在我不知道如何继续。我该怎么办?非常感谢您的帮助。

(为了清楚起见,我确实尝试将编译器设置为Mingw32。但是还有其他错误。我现在专注于让VC工作。)


编辑:我按照this page上的说明尝试使用SDK构建环境CMD。我收到了同样的错误。

6 个答案:

答案 0 :(得分:21)

我尝试在“开发”中安装pandas时遇到此问题。模式。我是& up;现在跑我的环境:

  • Windows XP Pro x64 SP2
  • WinPython 64bit 2.7.5.3(Python 2.7.5.amd64)<--&#34;已注册&#34;作为系统的使用WinPython控制面板应用程序的python发行版

运行python setup.py develop时遇到的问题:

  • 无法找到vcvarsall.bat
  • 致命错误C1083:无法打开包含文件:&#39; basetsd.h&#39;:没有这样的文件或目录...退出代码2

解决方案:

  1. Download并安装Microsoft Visual C ++ 2008 Express。
  2. Download并安装适用于Windows 7和.NET Framework 3.5 SP1的Microsoft Windows SDK。您只需要:
    • 开发人员工具&gt; Windows标题和库<--这为您提供了basetsd.h
    • 开发人员工具&gt; Visual C ++编译器<--这为您提供了64位编译器
  3. 复制C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars64.batC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\vcvarsamd64.bat。观察文件名的更改。
  4. C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin添加到PATH。这可能不是必需的(我在重新安装带有Headers&amp; Libs的SDK之前这样做了;因此,必要性是未知的。)
  5. 此时,运行python setup.py develop已成功完成,python -c "import pandas; print pandas.__version__"生成了我预期的git标记。

    [编辑] 进一步阅读:

答案 1 :(得分:20)

如果任何人目前(2017)在使用Visual C ++ 2015工具时遇到相同的错误,请再次启动安装程序,并根据您的操作系统选择Windows 8.1 / 10 SDK。这将解决basestd.h错误。

如果仍然无效,请尝试从以下位置启动构建工具:C:\ Program Files(x86)\ Microsoft Visual C ++ Build Tools。

另一种选择是,只需安装anaconda 2或3(64位,如果你也不想要内存错误)。它包含了所有预先构建的重要软件包:sklearn,matplotlib,scipy,numpy,pandas甚至web开发框架,如flask。

答案 2 :(得分:4)

对于使用Windows 10的用户,请从here下载SDK以修复标头文件this.locationRequest = new LocationRequest(); this.locationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS); this.locationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS); this.locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder(); builder.addLocationRequest(this.locationRequest); this.locationSettingsRequest = builder.build(); this.locationCallback = new LocationCallback() { @Override public void onLocationResult(LocationResult locationResult) { super.onLocationResult(locationResult); // why? this. is. crazy. Android. Location currentLocation = locationResult.getLastLocation(); GPSPoint gpsPoint = new GPSPoint(currentLocation.getLatitude(), currentLocation.getLongitude()); Log.i(TAG, "Location Callback results: " + gpsPoint); if (null != workable) workable.work(gpsPoint); } }; this.mFusedLocationClient = LocationServices.getFusedLocationProviderClient(MainApplication.getAppContext()); this.mFusedLocationClient.requestLocationUpdates(this.locationRequest, this.locationCallback, Looper.myLooper());

我下载了.exe,安装并且工作得很好。 SDK大约是2.3GB。

注意:对于像我这样有64位系统的用户会遇到其他错误:

basestd.h

有一个很好的答案here通过将`LINK : fatal error LNK1158: cannot run 'rc.exe' error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe' failed with exit status 1158 文件放在系统的正确文件夹中来解决问题。

答案 3 :(得分:1)

有关建议,您可以尝试使用setup.py

构建cython 64位

我正在使用Anaconda进行python发布,使用Microsoft的Windopws SDK 7和MSVC 12.0。

首先,我为我的cuda函数创建库, 其次,我为make temp文件夹运行python setup.py build_ext -i(你会得到错误), 然后在下面编译Makefile,

大多数情况下,我在setup.py中编译32位应用程序,然后将其更改为64位编译。

生成文件

CL_EXE      = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\cl.exe"
LINK_EXE    = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\link.exe"

CL_FLAGS    = /c /nologo /Ox /MD /W3 /GS- /DNDEBUG /O2 /fp:fast
CL_INC      = -I. -I"C:\Program Files\Microsoft SDKs\Windows\v7.1\Include" \
            -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include" -IC:\Users\name\Anaconda2\envs\py27\Lib\site-packages\numpy\core\include -IC:\Users\name\Anaconda2\envs\py27\include -IC:\Users\name\Anaconda2\envs\py27\PC 

LINK_FLAGS      = /DLL /nologo /INCREMENTAL:NO /MACHINE:X64
LINK_LIBPATH    = "/LIBPATH:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64" \
                    /LIBPATH:C:\Users\name\Anaconda2\envs\py27\libs \
                    /LIBPATH:C:\Users\name\Anaconda2\envs\py27\PCbuild\amd64 \
                    /LIBPATH:C:\Users\name\Anaconda2\envs\py27\PC\VS9.0\amd64 \
                    "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib\amd64" \
                    "/LIBPATH:C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64"
LINK_LIB        = cuda_multiply4D.lib cudart.lib MSVCRT.lib kernel32.lib
LINK_EXPORT     = /EXPORT:initmy_cuda
LINK_OBJ        = build\temp.win-amd64-2.7\Release\my_cuda.obj
LINK_OUT        = "/OUT:E:\my_cuda.pyd"
LINK_OTHER_CONF = /IMPLIB:build\temp.win-amd64-2.7\Release\my_cuda.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release\my_cuda.pyd.manifest 

all:
    $(CL_EXE) $(CL_FLAGS) $(CL_INC) /Tcmy_cuda.c /Fobuild\temp.win-amd64-2.7\Release\my_cuda.obj
    $(LINK_EXE) $(LINK_FLAGS) $(LINK_LIBPATH) $(LINK_LIB) $(LINK_EXPORT) $(LINK_OBJ) $(LINK_OUT) $(LINK_OTHER_CONF)

注意:

  • MSVCRT.lib kernel32.lib是可选的,
  • / EXPORT:initmy_cuda是必填项。其格式为init%yourfilename_WO_Ext%
  • “/ OUT:E:\ my_cuda.pyd”用于确定您的输出位置,文件名及其扩展名。

答案 4 :(得分:0)

将这些添加到Visual Studio安装目录中的环境变量

  

C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC

     

C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ bin

     

C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ Tools

     

希望它可以解决问题。

答案 5 :(得分:0)

我可以通过从这个链接下载并安装最新的 Windows 10 SDK 来解决这个问题: https://software-download.microsoft.com/download/pr/19041.685.201201-2105.vb_release_svc_prod1_WindowsSDK.iso

但是(cpython)出现了另一个问题:

error C2039: 'exc_type': is not a member of '_ts'

我可以通过在

中声明额外的指针来解决
(...\python38\include\cpython\pystate.h)

我在第 77 行找到了这些:

/* The exception currently being raised */
PyObject *curexc_type;
PyObject *curexc_value;
PyObject *curexc_traceback;

我在它们之后添加以下内容(没有前三个字母“cur”):

/* The exception currently being raised */
PyObject *exc_type;
PyObject *exc_value;
PyObject *exc_traceback;