[英]Running Cython in Windows x64 - fatal error C1083: Cannot open include file: 'basetsd.h': No such file or directory
我一直在尝试在我的 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 添加到注册表中,并在Joe DF 的回答中找到了.reg
文件。 之后,我从 这里(我认为它行不通)和这里(但应该是这个)安装了 Visual C++ 编译器。 此时,我在C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\bin
目录中拥有所有vcvars32.bat
、 vcvars64.bat
、 vcvars86_amd64.bat
、 vcvarsx86_ia64.bat
。 我运行vcvars64.bat
并且没有错误消息。
随后,我按照这个页面创建了一个“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 工作。)
编辑:我尝试按照此页面上的说明使用 SDK 构建环境 CMD。 我收到了同样的错误。
如果任何人目前(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,甚至是 Flask 等 Web 开发框架。
我在尝试以“开发”模式安装pandas
时遇到了这个问题。 我现在正在运行。 我的环境:
<--
使用 WinPython 控制面板应用程序“注册”为系统的 Python 发行版运行python setup.py develop
遇到的问题:
解决方案:
<--
这给你basetsd.h
<--
这为您提供了 64 位编译器C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\bin\\vcvars64.bat
到C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\bin\\amd64\\vcvarsamd64.bat
。 观察文件名的变化。C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\bin
到PATH
。 这可能不是必需的(我在重新安装带有头文件和库的 SDK 之前这样做了;因此,未知必要性)。 此时,运行python setup.py develop
成功完成并且python -c "import pandas; print pandas.__version__"
产生了我期望的 git 标签。
[编辑]进一步阅读:
对于使用 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 for make temp 文件夹(你会得到错误),然后编译下面的 Makefile,
大多数情况下,当它编译 32 位应用程序时,我从 setup.py 获得它,然后将其更改为编译 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)
笔记:
将这些添加到 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
希望它能解决问题。
我可以通过从这个链接下载和安装最新的 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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.