如何使用cython编译扩展?

时间:2011-11-11 00:19:21

标签: python windows 64-bit compiler-errors cython

我正在尝试从安装了Python 2.6 64位版本的Windows 7 64位计算机上的示例页面here编译一个简单的cython扩展。我从Gohlke's page为Windows 64位版本安装了Cython 0.15.1。

基本上,herehere的答案不是我的选择,因为我确实需要Python 64位版本来处理更大的内存。另外,因为我试图使用Microsoft SDK for .NET 4进行编译,所以我不能在后一种解决方案中使用该方法。

我尝试了here步骤并观察了绿色窗口,但编译现在抛出了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 :(得分: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的编译器。混合不同的编译器和运行时库是有风险的。

答案 1 :(得分:5)

http://wiki.cython.org/64BitCythonExtensionsOnWindows的文档说:

  

对于Python 2.6,2.7和3.1,您应该使用Microsoft Windows SDK   适用于Windows 7和.NET Framework 3.5 SP1。更高版本或更早版本   SDK将链接错误的C运行时。请注意以后的版本   Python可能需要更新版本的Windows   SDK。这是确保扩展名与链接相关所必需的   与Python相同的C运行时版本。使用正确版本的SDK   是使用Microsoft的构建工具来控制它的唯一方法。

答案 2 :(得分:0)

Microsoft现在专门为Python 2.7提供了一个c编译器软件包。

我建议您使用它而不是SDK和VS. VS express版本没有64位编译器,这就是理论上你需要SDK的原因。我尝试安装SDK但它没有帮助。如果您不需要SDK或VS用于其他任何操作,请将其卸载并使用http://www.microsoft.com/en-gb/download/details.aspx?id=44266中的编译器。

如果您在安装编译器后仍然遇到问题,我在pyusb 2.7 windows install error上的回答可能会有所帮助。