2011-11-11 79 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