关于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,总算装上了,万幸。
此外发现年纪大了很多东西记不住,还是得写写,省得以后遇到又一顿乱找。