如何使用cython编译扩展?

4 投票
3 回答
4092 浏览
提问于 2025-04-17 06:05

我正在尝试在我的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 个回答

0

微软现在有一个专门为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安装错误上的回答,可能会对你有帮助。

5

在这个链接 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 是通过微软的构建工具来控制这一点的唯一方法。

5

这是我一个批处理文件的摘录:

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的编译器。混合使用不同的编译器和运行库是有风险的。

撰写回答