2012-04-10 56 views
3

我目前在Windows上構建64位擴展,遵循Compiling 64-bit extension modules on Windows中的說明。使用Windows SDK構建Python包的批處理腳本

我想這個劇本,所以我不必打開Windows SDK命令外殼我想這樣做,每一次,所以我有一個批處理文件:

setlocal EnabledDelayedExpansion 
CALL "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd" /x64 /release 
set DISTUTILS_USE_SDK=1 
\path\to\python.exe \path\to\setup.py bdist --format=msi 

不過,我得到這些錯誤。如何將cl.exe重新放回路徑上?

Could not locate executable cl.exe 
Executable cl.exe does not exist 

公平的警告,我知之甚少在Windows上建立擴展正如從這個職位,所以請提出一個更好的方式,如果有一個。

編輯:對SetEnv.cmd的原始調用確實會引發錯誤。

The x64 compilers are not currently installed. 
Please go to Add/Remove Programs to update your installation. 
. 
Setting SDK environment relative to C:\Program Files\Microsoft SDKs\Windows\v7.0 
. 
The system cannot find the batch label specified - Set_x64 

有那麼許多命令一些錯誤,我使用基於該系統路徑(例如,子進程調用的git它不能找到GIT)。

CL.exe安裝在這裏C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\Bin\amd64\cl.exe。如果我只是通過快捷方式打開Windows SDK Cmd Shell並從這裏安裝通常的方式,就可以找到它。

+0

你是如何從一開始就把它從路上帶走的? – 2012-04-10 16:06:59

+0

我沒有把它從路上取下來。它在批處理文件環境的路徑中不可用。我認爲這是通過對SetEnv.cmd的調用發生的。當運行Windows SDK Command Shell時,它會使用/ K選項調用CMD.exe,我懷疑這與它有關。我不知道如何在批處理文件中複製這樣的行爲。 – jseabold 2012-04-10 16:12:24

+0

克里斯多弗,我編輯了一些更多的信息的原始帖子。 – jseabold 2012-04-10 17:36:13

回答

3

爲了後代的緣故。這按預期工作。但是,我的批處理文件中存在拼寫錯誤。如果將第一行替換爲

setlocal EnableDelayedExpansion 

一切按預期工作。問題是那個!路徑!沒有在SetEnv.cmd中正確展開。

0

我對這個問題的解決方案是使用Python腳本 - 比我的Windows批處理腳本更容易。您可以使用subprocess模塊來調用其他程序,並且它會使環境變量保持不變,除非您明確地更改它們。

順便說一句,Cython不是編譯Python到EXE文件的唯一方法。您也可以使用像cz_freeze這樣的工具,如果您不需要Cython的其他功能,我認爲它更容易一些。

+0

cx_Freeze不是編譯器。它是一個包裝商。使用Cython構建的模塊比使用cx_Freeze打包的模塊運行速度快10-100倍。 – xaav 2017-01-21 20:04:12

0

如果Visual Studio安裝在您的系統中,請在批處理腳本中添加一個步驟以運行vcvarsall.bat。對於前如果安裝了Visual Studio 2010中,這個批處理文件應該存在於

"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat", 

或曾經開車送你已經安裝了Visual Studio,只要你沒有覆蓋缺省的安裝位置。

+0

我沒有vcvarsall.bat。我有'C:\ Program Files文件(x86)\ Microsoft Visual Studio 9.0 \ VC \ bin \ vcvars64.bat',但向它添加調用似乎沒有解決問題。 – jseabold 2012-04-10 17:41:35