在 Windows x64 中运行 Cython - 致命错误 C1083:无法打开包含文件:'basetsd.h':没有这样的文件或目录
Posted
技术标签:
【中文标题】在 Windows x64 中运行 Cython - 致命错误 C1083:无法打开包含文件:\'basetsd.h\':没有这样的文件或目录【英文标题】:Running Cython in Windows x64 - fatal error C1083: Cannot open include file: 'basetsd.h': No such file or directory在 Windows x64 中运行 Cython - 致命错误 C1083:无法打开包含文件:'basetsd.h':没有这样的文件或目录 【发布时间】:2022-01-07 03:51:31 【问题描述】:我一直在尝试在我的 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's answer here 中找到了 .reg
文件。之后,我从here(我认为它不起作用)和here(但这个应该)安装了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
,没有错误信息。
随后,我跟着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。我收到了同样的错误。
【问题讨论】:
我希望this 有所帮助。 嗨 SAM,我知道变量VS90COMNTOOLS
。 Cython 实际上先搜索 VC 目录,然后再转到 VS90COMNTOOLS
。并且至少在构建的初始步骤中,Cython 能够按照问题文本中的描述定位 VC 组件。不过谢谢。
您是否检查过 (a) 文件是否已安装以及安装在何处以及 (b) 编译器使用 /showincludes 包含哪些内容,最后 (c) 验证该项目没有被编译器指令隐藏?如果你检查 cl.exe 帮助 /?那么您应该能够使内容更加冗长。
嗨,Preet,我刚刚发现 basetsd.h
或 windows.h
(构建 C++ 程序页面中提到的另一个头文件。msdn.microsoft.com/en-us/library/z7kx322x.aspx)我想知道为什么
【参考方案1】:
我在尝试以“开发”模式安装 pandas
时遇到了这个问题。我现在正在运行。我的环境:
<--
使用 WinPython 控制面板应用程序“注册”为系统的 python 发行版
运行python setup.py develop
时遇到的问题:
解决办法:
-
Download 并安装 Microsoft Visual C++ 2008 Express。
Download 并安装适用于 Windows 7 和 .NET Framework 3.5 SP1 的 Microsoft Windows SDK。您将只需要:
开发者工具 > Windows 头文件和库
<--
这给了你basetsd.h
开发人员工具 > Visual C++ 编译器 <--
这为您提供了 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
。这可能不是必需的(我在重新安装带有 Headers & Libs 的 SDK 之前这样做了;因此,必要性未知)。
此时,运行python setup.py develop
成功完成,python -c "import pandas; print pandas.__version__"
产生了我预期的 git 标签。
[编辑]进一步阅读:
error: Unable to find vcvarsall.bat answer if you just want binaries to install answer if you want to compile on x64 machine answer about the file location/name change distutils issue 7511【讨论】:
太棒了。在相关的说明中,您知道在哪里\如何在没有 Web 安装程序的情况下直接下载 Windows SDK for Windows 7? 对不起@LucasSoares 我不知道你在哪里可以找到【参考方案2】:如需建议,您可以尝试使用 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)
注意:
MSVCRT.lib kernel32.lib 是可选的, /EXPORT:initmy_cuda 是强制性的。它的格式 init%yourfilename_WO_Ext% "/OUT:E:\my_cuda.pyd" 用于确定您的输出位置、文件名和扩展名。【讨论】:
【参考方案3】:如果目前(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 开发框架。
【讨论】:
我在 Windows 7 上选择了 win8.1 选项。pandas
已构建良好。谢谢。
这帮助我使用 32 位 Windows 10 安装 Geemusic requirements.txt。在我安装 Windows 10 SDK 后工作。谢谢;)
专门安装 Windows headers 选项有帮助!
2018.我不敢相信,但安装 win 10 sdk 64 修复了我的 basestd.h 问题并让我安装 scikit-image
2021.我也不敢相信,但安装 win 10 sdk 64 修复了我的 basestd.h 问题并让我安装 pybullet【参考方案4】:
对于那些使用 Windows 10 的用户,请从 here 下载 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
here 有一个很好的答案,它通过将 rc.exe
文件放在您系统的正确文件夹中来解决问题。
【讨论】:
Anaconda + windows 数据中心服务器 - 这是唯一有效的解决方案。这是实际错误:找到可执行文件 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe geometry.cc:\programdata\anaconda3\include\pyconfig.h(222): fatal错误 C1083:无法打开包含文件:'basetsd.h':没有这样的文件或目录 这很有用,但我还需要复制 rcdll.dll 文件,否则我会收到 link.exe failed 错误语句。见***.com/a/44563421/8195528 没有为我修复( 该死的,真烦人!很高兴它现在有效。谢谢朋友,非常感谢您的链接。 谢谢!我试图运行“pip install twofish”,错误将我带到这里,这解决了问题!【参考方案5】:将这些添加到 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
希望它能解决问题。
【讨论】:
虽然这些目录确实存在,但对我没有帮助【参考方案6】:我可以通过从这个链接下载并安装最新的 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;
【讨论】:
不得不重命名 Python 标头的内部细节表明你搞砸了。我猜你正在使用与 Python 3.8 不兼容的 3 年旧版本的 Cython。 您的“解决方案”不是解决方案,您应该期望您的程序以意想不到的方式中断以上是关于在 Windows x64 中运行 Cython - 致命错误 C1083:无法打开包含文件:'basetsd.h':没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章
如何在Windows 2012 r2 x64上运行jenkins slave?
C# WinForms 使用 FlashLight 内置到运行 Windows 10 Professional x64 的移动设备中