转载 python扩展问题”unable to find vcvarsall.bat“的解决
原文來自:http://blog.csdn.net/ren911/article/details/6448696
2011-05-26 22:53?3654人閱讀?評論(3)?收藏?舉報在用C給python3.寫擴展時遇到如下問題:
寫好*module.c和setup.py文件后執(zhí)行
python setup.py build
報unable to find vcvarsall.bat
我機器上有vs2005和vc6,但是還是報錯。
搜索很多資料:
網(wǎng)上提供解決辦法如下:
下載mingw環(huán)境,添加環(huán)境變量
使用
python setup.py build –compiler=mingw32
這個辦法感覺只是繞過了這個問題,并不是真正解決問題,而且我系統(tǒng)中python是用vs編譯的,擴展模塊卻用mingw-gcc編譯,感覺可能有問題。
但網(wǎng)上對此就缺少詳細的說明
經(jīng)過對C:/Python32/Lib/distutils目錄下.py文件的仔細翻閱,發(fā)現(xiàn)“unable to find vcvarsall.bat”這句話出在msvc9compiler.py中
再研究這個文件發(fā)現(xiàn)問題所在了:
它是在注冊表中尋找到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構(gòu)建的所以VERSION是9.0
修改MSVCCompiler函數(shù):
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以上的編譯器。
轉(zhuǎn)載于:https://www.cnblogs.com/shalang/articles/2825676.html
總結(jié)
以上是生活随笔為你收集整理的转载 python扩展问题”unable to find vcvarsall.bat“的解决的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (转)安装黑苹果 MAC OS X Li
- 下一篇: ArrayList源码分析(基于JDK1