關於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,總算裝上了,萬幸。
此外發現年紀大了很多東西記不住,還是得寫寫,省得以后遇到又一頓亂找。