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

我一直试图在我的Window 7系统上安装Cython for Python 2.7。 特别是,我更喜欢64位的一切。 (如果你想知道,我需要Cython,因为Cython是我需要的一个组件,用于一些专门的数值分析的另一个包,而x64对于大型数据集的存储可能是一个优势。

所以我从官方网站下载了x64 Python 2.7。 从Christoph Gohlke得到Cython 。 Python 2.7的amd64版本当然。 在我安装之前,我在这里添加了Python 2.7到registry中的。 之后,我从这里安装了Visual C ++编译器(我不认为它可行), 在这里 (但是这个应该)。 此时,我已经在我的C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin目录下了所有的vcvars32.batvcvars64.batvcvars86_amd64.batvcvarsx86_ia64.bat 。 我跑了vcvars64.bat ,没有错误信息。

随后,我跟着这个页面创build了一个“hello world”testing文件。

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

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

所以我想,自己:那么,Cython找不到那个文件,因为它不存在。 (我search了我的整个硬盘。)所以我将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现在工作。


编辑:我尝试使用SDK构build环境CMD按照此页面上的说明。 我收到了同样的错误。

我试图在“开发”模式下安装pandas时遇到了这个问题。 我现在正在运行。 我的环境:

  • Windows XP专业版x64 SP2
  • WinPython 64bit 2.7.5.3(Python 2.7.5.amd64) <-- “注册”为使用WinPython控制面板应用程序的系统python发行版

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

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

解:

  1. 下载并安装Microsoft Visual C ++ 2008 Express。
  2. 下载并安装适用于Windows 7和.NET Framework 3.5 SP1的Microsoft Windows SDK。 您将只需要:
    • 开发人员工具> Windows头文件和库<--这给你basetsd.h
    • 开发人员工具> 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\binPATH 这可能不是必需的(我在重新安装带有Headers&Libs的SDK之前就这样做了;因此,这个必要性是未知的)。

此时,运行python setup.py develop已经成功完成, python -c "import pandas; print pandas.__version__"产生了我期望的git标签。

[编辑]更多阅读:

  • 错误:无法找到vcvarsall.bat
    • 回答如果你只是想要安装二进制文件
    • 回答如果你想在x64机器上编译
    • 回答有关文件位置/名称更改
  • distutils问题7511

如果任何人目前(2017年)与Visual C ++ 2015工具面临同样的错误,请重新启动安装程序,并根据您的操作系统选择Windows 8.1 / 10 SDK。 这将修复basestd.h错误。

如果仍然不能正常工作,请尝试从以下位置启动构建工具:C:\ Program Files(x86)\ Microsoft Visual C ++构建工具。

另一种方法是,只需安装2或3(64位,如果你不想要内存错误)。 它包含了所有重要的包:sklearn,matplotlib,scipy,numpy,熊猫,甚至Web开发框架,例如瓶子。

对于那些使用Windows 10,从这里下载SDK来修复头文件basestd.h

我下载的.exe,安装和工作很好。 SDK是〜2.3GB。

注意:对于像我这样的64位系统的人,有一个额外的错误:

 `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 

这里有一个很好的答案,通过将rc.exe文件放入系统的正确文件夹来解决问题。

对于建议,你可以尝试使用setup.py来构建cython 64位

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

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

大多数情况下,我在编译32位应用程序时从setup.py中得到这个,然后把它改为编译的64位。

Makefile文件

 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”用于确定您的输出位置,文件名以及扩展名。