40

我一直在尝试在我的 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\binvcvars32.batvcvars64.batvcvars86_amd64.batvcvarsx86_ia64.batvcvars64.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\binto复制\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 。我收到了同样的错误。

4

6 回答 6

39

如果有人目前(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 开发框架。

于 2017-03-06T11:40:02.527 回答
23

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

  • Windows XP 专业版 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。您将只需要:
    • Developer Tools > Windows Headers and Libraries<--这为您提供basetsd.h
    • Developer Tools > Visual C++ Compilers<--这为您提供了 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 标签。

[编辑]进一步阅读:

于 2014-09-09T00:16:23.980 回答
21

对于使用 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文件放在系统的正确文件夹中来解决问题。

于 2017-07-02T05:11:53.980 回答
2

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

C:\Program 文件 (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

希望它能解决问题。

于 2018-09-30T12:58:06.787 回答
1

如需建议,您可以尝试使用 setup.py 构建 cython 64 位

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

首先,我为我的 cuda 函数创建库,其次,我为 make temp 文件夹运行 python setup.py build_ext -i(你会得到错误),然后在下面编译 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" 用于确定您的输出位置、文件名和扩展名。
于 2016-10-26T08:49:50.963 回答
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;
于 2020-12-20T07:22:07.433 回答