繁体   English   中英

在 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

我一直在尝试在我的 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.batvcvars64.batvcvars86_amd64.batvcvarsx86_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时遇到了这个问题。 我现在正在运行。 我的环境:

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

运行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 这可能不是必需的(我在重新安装带有头文件和库的 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)

笔记:

  • MSVCRT.lib kernel32.lib 是可选的,
  • /EXPORT:initmy_cuda 是强制性的。 其格式为 init%yourfilename_WO_Ext%
  • "/OUT:E:\\my_cuda.pyd" 用于确定您的输出位置、文件名和扩展名。

将这些添加到 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM