python27(32位)安装模块报错“error: Unable to find vcvarsall.bat”

时间:2024-03-23 22:35:56

1)首先,下载一个Microsoft Visual C++ Compiler for Python 2.7的补丁,下载地址在这里:

http://www.microsoft.com/en-us/download/details.aspx?id=44266

2) 然后下载安装VS2008(对应VER9.0),如果电脑上安装的是VS2010(对应VER10.0),

可以在VS命令行下执行:SET VS90COMNTOOLS=%VS100COMNTOOLS%

如果你安装的是 2012 版(对应VER11.0), SET VS90COMNTOOLS=%VS110COMNTOOLS%

如果你安装的是 2013版(对应VER12.0), SET VS90COMNTOOLS=%VS120COMNTOOLS%

或用以下方法也一样可以解决:

3) “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(12.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以上的编译器。

4)之后安装还是报错:“ error: command 'mt.exe' failed with exit status 31”

编辑Python27\Lib\distutils\msvc9compiler.py,查找ld_args.append('/MANIFESTFILE:' + temp_manifest)一行,在其后添加一行,内容为ld_args.append('/MANIFEST')

5)之后安装就成功了!