1. 程式人生 > >徹底解決 error: Unable to find vcvarsall.bat

徹底解決 error: Unable to find vcvarsall.bat

轉自:http://blog.csdn.net/secretx/article/details/17472107

1.windows上做Python開發,搭環境還真不比Linux容易。error: Unable to find vcvarsall.bat這個錯誤眼熟吧?

凡是安裝和作業系統底層密切相關的Python擴充套件,幾乎都會遇到這個錯誤。比如PIL, Pillow(兩個圖形庫),greenlet以及其基礎之上的eventlet, gevent微執行緒併發庫等等。當然了有一些情況下,你不必徹底解決它,你可以選擇windows版本,那麼也就只能使用閹割版功能。

PIL有windows版,即使安裝上了,64位Python一定報錯 The _imaging C module is not installed, 除非自己重新編譯安裝。此外與CPU位數可能有關係,僅個人猜測。本人兩個機器都是Win7旗艦版64位,安裝的32位Python,其中一個CPU是64位的也遇到這個錯誤,32位的CPU則不報錯。

為了解決64位CPU報錯,於是安裝Pillow的windows版,確實能正常使用,不再報錯。但是圖片效果極不理想,圖片裡面用到font就悲劇,出個驗證碼的圖片都難以辨認。

greenlet也可以安裝windows版,有可能報錯載入動態連結庫失敗,比如”ImportError: DLL load failed: %1 不是有效的 Win32 應用程式。“不幸我也遇到了。

2.windows安裝使用這些偏底層的Python擴充套件太不爽了,怎麼徹底解決 error: Unable to find vcvarsall.bat 呢?

    1.不要按網上說的,安裝MinGW,然後在“..python安裝路徑...\Lib\distutils

”下新建一個檔案distutils.cfg,在這檔案裡面指定編譯器為mingw32

       如:

[build]
compiler=mingw32
    原因是什麼,可以百度一下mingw是什麼,畢竟不是GCC,又不如VC接windows的地氣,編譯出來的東西,安裝上了也有不好使的時候。甚至我遇到MinGW還無法編譯greenlet0.4.1,導致greenlet無法原始碼安裝。MinGW經常command 'gcc' failed with exit status 1 或者error: unrecognized command line option '-mno-cygwin'。即使編譯通過了,安裝上了,
你安裝的Python標準庫不是由mingw編譯的,你的擴充套件包卻是mingw編譯的,誰也不敢保證完全相容或者說質量跟得上,說不準一些莫名其妙的神經質錯誤。

     2.去下載安裝VS2010(08版貌似也行,不過沒必要用舊版,指不定哪個庫又無法編譯),給個地址(百度的雲盤  國內應該速度可以)

http://pan.baidu.com/share/link?shareid=1609273194&uk=3255422755

   然後注意這一步很重要:命令列下執行 SET VS90COMNTOOLS=%VS100COMNTOOLS%

   如果你安裝的是 2012 版 SET VS90COMNTOOLS=%VS110COMNTOOLS%

   如果你安裝的是 2013版 SET VS90COMNTOOLS=%VS120COMNTOOLS%

   或者更暴力,直接配置系統環境變數 VS90COMNTOOLS指向 %VS你的版本COMNTOOLS%

   你還可以更暴力,在“..python安裝路徑...\Lib\distutils目錄下有個msvc9compiler.py找到243行  

                  toolskey = "VS%0.f0COMNTOOLS" % version   直接改為 toolskey = "VS你的版本COMNTOOLS"(這個就是為什麼要配 ”VS90COMNTOOLS“ 的原因,因為人家檔名都告訴你了是  Microsoft vc 9的compiler,   程式碼都寫死了要vc9的comntools,就要找這個玩意兒,找不到不幹活)

   這麼做的理由是Python2。7 擴充套件包是可以用08版或者更高的VS編譯的,其setup.py(安裝指令碼)都是去windows系統尋找08版的VS,所以設定VS90的path

   如果Python版本小於2.7,強烈建議使用 VS08版,用2010或者更高可能部分擴充套件不好使。給個例子:

    http://stackoverflow.com/questions/6551724/how-do-i-point-easy-install-to-vcvarsall-bat    這個例子說明 VS2010不適合Python2.6

    3.安裝VS後該重啟的重啟,clean一下之前安裝Python擴充套件失敗的殘留檔案,然後 直接下載 pil   pillow greenlet  eventlet等原始碼,解壓後python setup.py build發現都可以編譯了。接下來就換成 python setup.py install安裝吧。