Python擴展問題」unable to find vcvarsall.bat「的解決

在用C給python3.寫擴展時遇到以下問題:python

寫好*module.c和setup.py文件後執行函數

python setup.py build

報unable to find vcvarsall.batui

我機器上有vs2005和vc6,可是仍是報錯。this

搜索不少資料:code

網上提供解決辦法以下:orm

下載mingw環境,添加環境變量get

使用編譯器

python setup.py build –compiler=mingw32

這個辦法感受只是繞過了這個問題,並非真正解決問題,並且我係統中python是用vs編譯的,擴展模塊卻用mingw-gcc編譯,感受可能有問題。io

但網上對此就缺乏詳細的說明編譯

通過對C:/Python32/Lib/distutils目錄下.py文件的仔細翻閱,發現「unable to find vcvarsall.bat」這句話出在msvc9compiler.py中

再研究這個文件發現問題所在了:

它是在註冊表中尋找到vs的目錄,再去在vs目錄下找vcvarsall.bat。

可是問題就出在python32裏面默認是vc9.0也就是vs2008因此它在註冊表裏面找不到鍵值返回None

productdir = Reg.get_value(r"%s/Setup/VC" % vsbase,

"productdir")

vsbase值爲:Software/Microsoft/VisualStudio/9.0

具體修改代碼以下:

msvc9compiler.py中

def find_vcvarsall(version) 用於查找vcvarsall.bat version就是版本號,其實是9.0

vc_env = query_vcvarsall(VERSION, plat_spec)

VERSION = get_build_version() 由於python32本身是由vc9.0構建的因此VERSION是9.0

修改MSVCCompiler函數:

vc_env = query_vcvarsall(VERSION, plat_spec)

爲:

vc_env = query_vcvarsall(8.0, plat_spec)

不過還有這句話:

if VERSION < 8.0:
 
raise DistutilsPlatformError("VC %0.1f is not supported by this module" % VERSION)

看來,python3.2中的distutils只支持vc8.0以上,即vs2005以上的編譯器。

相關文章
相關標籤/搜索