如何使用cython编译扩展?
我正在尝试在我的Windows 7 64位机器上编译一个简单的Cython扩展,使用的是安装好的64位Python 2.6。我从Gohlke的网站上安装了64位版本的Cython 0.15.1。
基本上,来自这里和这里的答案都不适合我,因为我确实需要64位的Python版本来处理更大的内存。此外,由于我尝试使用Microsoft .NET 4 SDK进行编译,所以我不能采用后者的解决方案。
我尝试了这里的步骤,并看到了绿色窗口,但编译时却出现了cannot find vcvarsall.bat
的错误。以下是我尝试的命令序列:
C:\>cd "Program Files\Microsoft SDKs\Windows\v7.1\"
C:\Program Files\Microsoft SDKs\Windows\v7.1>set DISTUTILS_USE_SDK=1
C:\Program Files\Microsoft SDKs\Windows\v7.1>setenv /x64 /release
Setting SDK environment relative to C:\Program Files\Microsoft SDKs\Windows\v7.1\.
Targeting Windows 7 x64 Release
C:\Program Files\Microsoft SDKs\Windows\v7.1>e:
E:\>cd cython
E:\cython>python setup.py build_ext --inplace
running build_ext
skipping 'fib.c' Cython extension (up-to-date)
building 'fib' extension
error: Unable to find vcvarsall.bat
有没有什么建议可以帮我解决这个问题?
3 个回答
微软现在有一个专门为Python 2.7准备的C语言编译器包。
我建议你使用这个包,而不是SDK和Visual Studio(VS)。因为VS的免费版没有64位的编译器,所以理论上你需要SDK。我尝试安装SDK,但并没有解决问题。如果你不需要SDK或VS做其他事情,可以把它们卸载掉,直接使用这个编译器,链接在这里:http://www.microsoft.com/en-gb/download/details.aspx?id=44266。
如果你安装了编译器后仍然遇到问题,可以参考我在pyusb 2.7在Windows安装错误上的回答,可能会对你有帮助。
在这个链接 http://wiki.cython.org/64BitCythonExtensionsOnWindows 上的说明提到:
对于 Python 2.6、2.7 和 3.1,你应该使用适用于 Windows 7 的 Microsoft Windows SDK 和 .NET Framework 3.5 SP1。使用更早或更新的 SDK 版本可能会链接到错误的 C 运行时。需要注意的是,更新版本的 Python 可能需要更现代的 Windows SDK 版本。这是为了确保扩展与 Python 使用相同的 C 运行时版本。使用正确版本的 SDK 是通过微软的构建工具来控制这一点的唯一方法。
这是我一个批处理文件的摘录:
rem Configure the environment for 64-bit builds.
rem Use "vcvars32.bat" for a 32-bit build.
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars64.bat"
rem Convince setup.py to use the SDK tools.
set MSSdk=1
set DISTUTILS_USE_SDK=1
7.1版本的SDK实际上是使用VS2010这个工具,但Python 2.6是用VS2008编译的。如果你能使用7.0版本的SDK(我记得它也叫.NET 3.5 SDK),那么你就可以使用VS2008的编译器。混合使用不同的编译器和运行库是有风险的。