python擴充問題”unable to find vcvarsall.bat“的解決

來源:互聯網
上載者:User

在用C給python3.寫擴充時遇到如下問題:

寫好*module.c和setup.py檔案後執行

python setup.py build

報unable to find vcvarsall.bat

我機器上有vs2005和vc6,但是還是報錯。

搜尋很多資料:

網上提供解決辦法如下:

下載mingw環境,添加環境變數

使用

python setup.py build –compiler=mingw32

這個辦法感覺只是繞過了這個問題,並不是真正解決問題,而且我系統中python是用vs編譯的,擴充模組卻用mingw-gcc編譯,感覺可能有問題。

但網上對此就缺少詳細的說明

經過對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

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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.