Python2.7安装mysqlclient报错:Unable to find vcvarsall.bat
首先得明确:Python 2.7在编译C扩展模块(比如mysqlclient)时,默认依赖Visual Studio 2008(VS9.0)的编译环境,你安装的Microsoft Visual C++ Compiler for Python就是微软为Python 2.7专门推出的替代方案,但路径配置上可能没踩对点子。
先说说pip和easy_install的查找逻辑:它们底层都是调用Python的distutils模块,这个模块会先检查VS90COMNTOOLS环境变量,然后尝试从这个路径去定位vcvarsall.bat;如果这个变量没设置或者路径不对,它会遍历系统里的VS安装目录去查找对应版本的工具链。
接下来给你几个可行的解决办法,按优先级排序:
1. 修正VS90COMNTOOLS的路径设置
你之前加了这个环境变量,但可能路径不对。VC for Python 2.7的默认安装路径是:
- 32位系统:
C:\Program Files\Common Files\Microsoft\Visual C++ for Python\9.0 - 64位系统:
C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0
正确的VS90COMNTOOLS应该指向这个目录下的VC\bin文件夹,比如64位系统下就是:C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0\VC\bin
设置好后重启命令行窗口(环境变量需要重启才生效),再尝试pip install mysqlclient或者easy_install mysqlclient。
2. 设置DISTUTILS_USE_SDK环境变量
如果上面的方法不行,可以让distutils直接使用Windows SDK来编译,步骤如下:
- 打开命令提示符,执行:
set DISTUTILS_USE_SDK=1 set MSSdk=1 - 然后在同一个命令窗口里执行安装命令:
pip install mysqlclient
这个方法会绕开VS路径的检查,直接调用系统里的SDK编译工具,适合路径配置容易出错的情况。
3. 直接使用预编译的wheel包
最省心的办法是跳过编译,直接下载对应Python版本的预编译wheel文件安装:
- 先确认你的Python 2.7是32位还是64位(执行
python -c "import struct; print(struct.calcsize('P') * 8)"可以看到位数) - 找到对应版本的mysqlclient wheel包(比如32位Python对应
mysqlclient-1.3.12-cp27-none-win32.whl,64位对应mysqlclient-1.3.12-cp27-none-win_amd64.whl) - 下载后执行
pip install <wheel文件名>
这样完全不需要编译,直接就能安装成功。
4. 修改distutils配置文件
如果上面的方法都不想用,可以修改distutils的配置文件强制指定编译器:
- 在你的用户目录下(比如
C:\Users\home)新建一个名为pydistutils.cfg的文件,内容如下:[build] compiler=msvc [build_ext] compiler=msvc - 保存后再执行安装命令,distutils会优先使用你配置的msvc编译器,也就是你安装的VC for Python工具链。
内容的提问来源于stack exchange,提问作者zahlen




