关于Unable to find vcvarsall.bat

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Unable to find vcvarsall.bat相关的知识,希望对你有一定的参考价值。

 关于Unable to find vcvarsall.bat问题解决方案:

系统:win10(64位);

python版本:3.5.2(32位)

vs版本:visual studio 2013

背景:学了python一周,做机器学习,因为要用python调用java包(HanLP),所以需要安装JPype,官网没找到32位的已编译好的包,就下了源码来编译,结果冒出Unable to find vcvarsall.bat错误,费了好大一会功夫,终于解决。

解决办法:

1、网上找了不少,有让装vs2008的,有让装MingGW的,有让改注册表的,都差不多试了一下,除了没装vs2008,都不好使

2、跑去找到Lib\distutils下的msvc9compiler.py文件,按照网上教程改了一下,教程如下:http://www.360doc.com/content/15/0414/23/12067640_463261796.shtml,发现不太对。

刚学python,不知道怎的,我的没用到这个文件;

3、后来查了查,发现同目录下还有个文件:_msvccompiler.py,进去看了看,功能貌似类似,就改了一下错误输出提示,重新编译安装,发现错误提示发生变化,确定是此文件起作用

4、调试了一下,跟踪代码过程中发现_find_vcvarsall函数下,会去找注册表来读取c编译器的相关路径信息,后来不确定会发生什么事情,就硬编码,把变量改了,如下:

  best_version = 12

  best_dir = ‘C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/‘

  vcruntime = ‘C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/redist/x86/Microsoft.VC120.CRT/msvcr120.dll‘

  第一个变量是指vs的版本,本人是Vs2013,所以定义为12,第二个变量vs安装的路径(本来这个路径应该是从注册表中读出来,但读的不对,不想改注册表,就硬编码了。),第三个变量是对应的c运行时需要的库,不同版本vs该库名字不一样。

5、改完后,重新编译安装试了一下,成了。

瞎猫碰着死老鼠,只能凭之前的c#、java经验去解决bug,总算装上了,万幸。

此外发现年纪大了很多东西记不住,还是得写写,省得以后遇到又一顿乱找。

以上是关于关于Unable to find vcvarsall.bat的主要内容,如果未能解决你的问题,请参考以下文章

windows下Python扩展问题error: Unable to find vcvarsall.bat

Python error: Unable to find vcvarsall.bat

windows编译python扩展Unable to find vcvarsall

解决error: Unable to find vcvarsall.batpython 2.7/vs2010

Windows下Python快速解决error: Unable to find vcvarsall.bat

python安装扩展”unable to find vcvarsall.bat“的解决办法