编译python扩展库遇到"unable to find vcvarsall.bat"的解决办法

本文针对Python Paramiko库依赖PyCrypto时遇到的编译问题进行了解析,并详细介绍了如何解决unabletofindvcvarsall.bat的问题,通过修改代码指定正确的VC版本号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近想要学习一下python的Paramiko库,Paramiko依赖PyCrypto,在编译PyCrypto时碰到了问题,大体上的意思就是:



 
  1. unable to find vcvarsall.bat

问题分析:

追踪错误提示内容,定位到如下文件



 
  1. python_path/lib/distutils/msvc9compiler.py

简单分析一下源码,发现在编译扩展库时,会通过此文件中提供的函数确定vcvarsall.bat的路径来设置vc的环境变量,
msvc9compiler.py中定义了一个全局变量



 
  1. VERSION = get_build_version()

使用get_build_version()函数获取VC的版本号,而这个版本其实就是编译python是用的VC版本,可能由于大多数人的python并不是自己编译的,导致通过此函数获取的VC的版本是不准确的。

msvc9compiler.py中,定义了一个类MSVCCompiler:



 
  1. class MSVCCompiler(CCompiler) :
  2. """Concrete class that implements an interface to Microsoft Visual C++,
  3. as defined by the CCompiler abstract class."""

在MSVCCompiler类的初始化函数initialize中设置VC环境变量,即通过一系列函数获取vcvarsall.bat的路径:



 
  1. #初始化函数initialize首先调用query_vcvarsall
  2. vc_env = query_vcvarsall(VERSION, plat_spec) #VERSION为上面提到的全局变量
  3. #vc_env调用find_vcvarsall
  4. vcvarsall = find_vcvarsall(version) #find_vcvarsall查找vcvarsall.bat的路径,参数version=VERSION

如果VERSION的值与本机安装的VC版本不符合,当然就找不到vcvarsall.bat了。

解决办法:

修改代码



 
  1. VERSION = get_build_version()



 
  1. VERSION = 10.0 #10.0为VC的版本号

具体的版本号根据实际安装的Visual Studio不同而不同,VS2010为10.0。





转载于:https://www.cnblogs.com/Wrong-Side/p/4315329.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值