关于Unable to find vcvarsall.bat

原文地址@http://www.cnblogs.com/wenyujun/p/5184494.html

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

系统:win1064位);

python版本:3.5.232位)

vs版本:visual studio 2013

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

解决办法:

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

2、跑去找到Libdistutils下的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,总算装上了,万幸。

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

原文地址:https://www.cnblogs.com/xianyadan/p/6719759.html