2011-11-11 78 views
3

我试图编译从here示例页面简单的用Cython扩展我的Windows 7 64位计算机上使用Python 2.6安装64位版本。我从Gohlke's page安装了Cython 0.15.1 for Windows 64位版本。如何使用cython编译扩展?

基本上,从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 

有关我如何解决此问题的任何建议?

回答

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

+0

+1谢谢。我现在会试试这个。我不知何故错过了关于VS2008的事实。我目前正在下载.NET 3.5 SDK,并会尝试这一点。 – Legend

+0

你是一个救世主。作品完美无瑕!再一次感谢你。 – Legend

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的构建工具来控制此问题的唯一方法。

+0

+1谢谢。我不知何故错过了'3.5 SP1'! – Legend

0

微软有一个C编译器套件专为Python 2.7版现在。

我建议你用这个来代替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的答案可能会有所帮助。

+0

请注意,[只提供链接的答案](http://meta.stackoverflow.com/tags/link-only-answers/info),所以SO答案应该是搜索解决方案的终点(vs.而另一个引用的中途停留时间往往会随着时间推移而过时)。请考虑在此添加独立的摘要,并将链接保留为参考。 – kleopatra