轉載:徹底解決 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
如:
[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'。即使編譯通過了,安裝上了, 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安裝吧。