標籤:

Python3.4 用 pip 安裝lxml時出現 「Unable to find vcvarsall.bat 」?

我在網上搜了好多,說需要安裝 vs2008,但是我安裝了vs2008專業版,依然還是這個問題「Unable to find vcvarsall.bat 」
再然後,我又照網上說的下載安裝MinGW了,並且修改了環境變數等一系列東西,最後錯誤又變成了「TypeError: unorderable types: NoneType() &>= str()」
請問這個到底該怎麼解決?


今天花了一天的時間解決這個問題!基本把網上說的方法都試了,什麼註冊表,改keytool,裝了vs2010等等,最後是看python源代碼解決的。

我的python版本是Python 3.5

該問題的產生是在windows環境中,python 的 Setup需要調用一個vcvarsall.bat的文件,該文件需要安裝c++編程環境才會有。網上的方法有兩個:一、安裝MinGW;二、安裝Visual Studio 。我用的是第二種方法。

步驟一:

在你的python程序所在文件夾中找到:「_msvccompiler.py」文件,例如我的電腦中的路勁是:

D:Program FilesAnaconda3Libdistutils\_msvccompiler.py

找到後用編輯器打開,找到「_find_vcvarsall」函數聲明中類似「if version &>= 14 and version &> best_version:」注意這裡的「14」,如果這裡是14說明VS版本要在14以上才可以。所以根據這句,我們要安裝最新的Visual Studio2015。(相對的如果是9就是9以上即可這時VS10什麼都是可以的)


步驟二:

現在Visual Studio 2015有社區版,可以免費使用,這個版本就夠了。為了方便大家,我放在雲盤。你也可以去官網下載。

http://pan.baidu.com/s/1eSueWLG


下載完畢後進行安裝:

注意一定要勾選c++環境,和XXXfor python,這兩個。web development應該是沒有影響的,但是由於這是軟體默認勾選的,所以我也裝了。

這一步,出現了一直停留在「Configuring Your System」的問題,然後在網上找到了如下解決方案:(Visual Studio Express 2013 for windows with update 2 installation Taking Too much time in "Configuring Your System")

意思就是把VS的進程都關了。我關掉VS2015後分分鐘就好了


剛從這個大坑裡爬出來:


1. 安裝wheel,命令行運行:

pip install wheel

2.在這裡下載對應的.whl文件,注意別改文件名!

http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml

Ctrl + F,輸入lxml,找到下面這段

Lxml, a binding for the libxml2 and libxslt libraries.
lxml?3.4.4?cp27?none?win32.whl
lxml?3.4.4?cp27?none?win_amd64.whl
lxml?3.4.4?cp33?none?win32.whl
lxml?3.4.4?cp33?none?win_amd64.whl
lxml?3.4.4?cp34?none?win32.whl
lxml?3.4.4?cp34?none?win_amd64.whl
lxml?3.4.4?cp35?none?win32.whl
lxml?3.4.4?cp35?none?win_amd64.whl

cp後面是Python的版本號,27表示2.7,根據你的Python版本選擇下載。

3. 進入.whl所在的文件夾,執行命令即可完成安裝

pip install 帶後綴的完整文件名


建議直接裝編譯好的安裝包:
http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml


!!!!python35已不適用以下方案

----------原答案-----------
C:/Python31/Lib/distutils目錄下,發現「unable to find vcvarsall.bat」這句話在msvc9compiler.py中
問題出在構建python的版本和你計算機上安裝的版本可能不一樣。
具體修改代碼如下:
msvc9compiler.py中
修改MSVCCompiler函數:
vc_env = query_vcvarsall(VERSION, plat_spec)
為:
如果安裝的是VS2014,則VERSION為13.0;
如果安裝的是VS2013,則VERSION為12.0;
如果安裝的是VS2012,則VERSION為11.0;
如果安裝的是VS2010,則VERSION為10.0;
如果安裝的是VS2008,則VERSION為9.0。
像我的安裝的是VS2013,則
vc_env = query_vcvarsall(12.0, plat_spec)

在我的電腦上,我查過它查找的VERSION為10.0,也就是VS2010,所以要人工干預下,而且修改此處對整個程序沒有影響,除非你換了VS版本

至於題主為啥2008版的沒用,因為Python3.4默認2010版,你也可以直接下2010的,這就不用改了


瀉藥,以下回答不保證是正確的。

1 直接下載預編譯好的二進位安裝包。

2 那個玩意是vc里的,我記得這裡有個vc版本問題,這個文件名好像不一樣,你進去安裝包里,看看實際用的是哪個腳本,找不到可能要添加環境變數。提示:這個是可以配置成使用mingw的,也是安裝腳本setup.py里配置的,如果你最後沒搞定,可以嘗試改成使用mingw。

3 換linux 使用系統帶的包管理器裝,通常問題不大。


微軟社區的開放者對這個問題給出了答覆。一句話:對於python,3.4 安裝Windows SDK for Windows 7 and .NET 4.0(或者 Visual Studio 2010) 。對其他版本,見表:

引自 https://blogs.msdn.microsoft.com/pythonengineering/2016/04/11/unable-to-find-vcvarsall-bat/


產生原因:

python3.4用的是msvs2010編譯的,所以python3.4默認只能認出msvs2010。

python2.7用的是msvs2008編譯的,所以python2.7默認只能認出msvs2008.

方法一:安裝mingw(不推薦)

下載mingw環境,添加環境變數

或者使用

python setup.py build –compiler=mingw32

方法二:安裝對應版本的msvs

python2安裝msvs2008,python3安裝msvs2010


方法三:設置變數

python2 在安裝擴展前執行

SET VS90COMNTOOLS = [vcvarsall.bat所在的目錄]

或者

SET VS90COMNTOOLS=%VS120COMNTOOLS%

在湖聞樟註:VS120COMNTOOLS改成你安裝的msvs版本對應的

python3在安裝擴展前執行

SET VS100COMNTOOLS = [vcvarsall.bat所在的目錄]

或者

SET VS100COMNTOOLS=%VS120COMNTOOLS%

在湖聞樟註:VS120COMNTOOLS改成你安裝的msvs版本對應的


方法四:修改安裝腳本

打開

[python3安裝目錄]Lib/distutils/msvc9compiler.py

修改MSVCCompiler函數:

vc_env = query_vcvarsall(VERSION, plat_spec)

為:

vc_env = query_vcvarsall(12.0, plat_spec)

在湖聞樟註:12.0改成你安裝的msvs對應的版本號

補充:

msvs2005版本號為8.0對應環境變數VS80COMNTOOLS

msvs2008版本號為9.0對應環境變數VS90COMNTOOLS

msvs2010版本號為10.0對應環境變數VS100COMNTOOLS

msvs2012版本號為11.0對應環境變數VS110COMNTOOLS


msvs2013版本號為12.0對應環境變數VS120COMNTOOLS
----------------------------------------------------------------------------------------------------------------------
python3.5升級了distutils,默認使用_msvccompiler.py ,變動有些大,上面說的修改msvc9compiler.py的辦法沒有效果,另外比較推薦使用編譯好的二進位包來安裝,畢竟省事嘛。


直接按 @cloak shining給的鏈接下二進位包就行。

python在windows下通過pip安裝帶有c擴展的包時,如果是python 2.7,需要vs2008,如果是python 3.x,需要vs2010,版本錯了都不行,更別提mingw。因為c運行時不兼容的原因。

還有兩個一勞永逸的解決方案:
1. 換linux
2. 用Anaconda Scientific Python Distribution


贊同 @深海魚的答案
但是,如果pip版本不是最新的可能遇到問題
win7 x64, python 3.5.1 x64, lxml-3.6.4-cp35-cp35m-win_amd64.whl
偏偏就提示版本不對
lxml-3.6.4-cp35-cp35m-win_amd64.whl is not a supported wheel on this platform.
You are using pip version 7.1.2, however version 8.1.2 is available.
You should consider upgrading via the "python -m pip install --upgrade pip" command.
運行 python -m pip install --upgrade pip 升級pip後就好了。
直接提示必須升級pip就好了,還搞得這麼含蓄。


今兒一天就耗在這兒上了,不過好在終於解決了。

先說下自己走了哪些然而沒有什麼卵用的彎路:上午試圖用安anaconda的方式繞過報錯,但是無用;安了一下午Visual Studio 2015,然而重啟之後還是報錯;然後就開始暴力改環境變數,SET VS90COMNTOOLS=%VS140COMNTOOLS%,and發現環境變數里還有個VS140COMNTOOLS指向了C:Program Files (x86)Microsoft Visual Studio 14.0Common7Tools,繼續然並卵;再然後在「..python安裝路徑...Libdistutils目錄下有個msvc9compiler.py找到243行,toolskey = "VS%0.f0COMNTOOLS" % version 直接改為 toolskey = "VS140COMNTOOLS『。。。

最後說下咋解決的吧,很令人崩潰的事實是真相是重新安裝pip/setuptools/virtualenv
執行以下語句就好了:

  1. python -m pip install -U pip
  2. pip install -U setuptools
  3. pip install -U virtualenv

然後我的jupyter notebook終於跳了出來,哎

真的,我覺得下次再遇到這種問題直接卸掉windows改Ubuntu,然後直接裝anaconda。windows的底層環境跟Python真是八字不合。
ps.話說情人節這天大家都在撒狗糧吃狗糧,只有我在單位搗鼓報錯,怪不得我是單身狗:)


pip install scrapy死活不成功,改用conda install scrapy就好了....


基於Python 2.7。之前試錯了整整一天,最後終於親測有效!(自己並沒有安裝visual studio 2008,假設執行以下操作還是不能成功安裝,就再安裝vs 2008吧O(∩_∩)O~)

1. 先下載微軟出的msi包來解決這個問題:Microsoft Visual C++ Compiler for Python 2.7。http://www.microsoft.com/en-us/download/details.aspx?id=44266

2.安裝後,路徑是:

C:Users[用戶名]AppDataLocalProgramsCommonMicrosoftVisual C++ for Python9.0 ,

可以看到這個路徑下就已經有一個vcvarsall.bat 文件了。(ps:如果有文件夾被隱藏了,無法直接找到路徑的話,就直接在「我的電腦」里搜索「Microsoft」,看能不能找到Visual C++ for Python的上級文件夾

3.接下來可以在cmd命令行中檢驗故障是否排除,如果還是出現同樣的報錯,那麼就代表你的setuptool的版本太老了,需要先更新機器上的setuptools。於是在命令行中執行:

pip install upgrade setuptools

更新之後,再用pip安裝各種包/模塊,應該就沒問題了。

ps:第3步不可小覷。我自己在安裝完Microsoft Visual C++ Compiler for Python 2.7後,依舊報錯,直到更新了setuptools才安裝成功的。希望能夠幫到你~


感謝@許仙的回答,我這裡補充一下,安裝whl文件需要使用cmd進入python/Scripts/。然後運行 pip3.4 install xxxxx.whl(針對3.4版本)


pip安裝pandas的時候出現了這個問題,於是下載了pandas-0.21.0-cp35-cp35m-win_amd64.whl文件,執行pip install pandas-0.21.0-cp35-cp35m-win_amd64.whl

報錯

將文件重命名為pandas-0.21.0-cp35-none-win_amd64.whl然後執行pip install pandas-0.21.0-cp35-none-win_amd64.whl 安裝成功


說說不對題但是可能對一些人有幫助的。

關鍵詞:Windows ,Scrapy,Python

Windows用戶,使用Python3.5,想安裝Scrapy模塊學學爬蟲,但pip install Scrapy出現「Unable to find vcvarsall.bat」問題;使用@深海魚的方法也是這個問題,但之前出現類似問題使用此方法奏效啊。查詢許久才知道,Scrapy模塊已停止了對Windows下Python3(及以上)的支持。

果斷下載Python2.7,pip install Scrapy成功!

(為此還學習了如何使版本3和版本2的Python共存呢。作為新手,感覺像在軟體面前盲人摸象,信息完全真空,累哦)


說一下我的(Python 3.5)解決方法,按@深海魚的方法安裝wheel後仍顯示「Unable to find vcvarsall.bat 」,按照WindowsCompilers - Python Wiki的說明,在安裝Visual Studio 2015時勾選了(已經安裝的可以選擇修改,添加所需功能)

  • 編程語言-&>針對Visual Studio的Python工具
  • Windows和Web開發-&>通用Windows應用開發工具-&>Widows 10 SDK
  • Windows和Web開發-&>Windows 8.1和Windows Phone 8.0/8.1工具(應該是可選項

安裝完成後,升級pip安裝程序:pip install --upgrade setuptools
再次嘗試安裝後就沒問題了

如果仍然不行,嘗試安裝「Microsoft Visual C++ Compiler for Python 2.7」Microsoft Visual C++ Compiler for Python 2.7,再次嘗試(在安裝wheel的前提下)。。

#知其然,不知其所以然#希望有所幫助,也歡迎指教#


本人親測,以下方法有效:
Python 2.7 會搜索 Visual Studio 2008.
如果你電腦上沒有這個版本的話,比如只有:
1.Visual Studio 2010,在cmd裡面執行:
SET VS90COMNTOOLS=%VS100COMNTOOLS%
2. Visual Studio 2012 的話:
SET VS90COMNTOOLS=%VS110COMNTOOLS%
以此類推:
3. Visual Studio 2013 的話:
SET VS90COMNTOOLS=%VS120COMNTOOLS%
4. Visual Studio 2003 的話:
SET VS90COMNTOOLS=%VS80COMNTOOLS%
方法來源於百度


少年,如果你有更高級的VS,比如2015的話,設置路徑要設置到WIN sdk的目錄,我的版本是7.1,編譯器在那裡。
當然,有些庫編譯的時候需要額外的東西,比如mysql的頭文件,這個我的辦法也解決不了,可以去安裝編譯好的。


推薦閱讀:

基於python的scrapy爬蟲,關於增量爬取是怎麼處理的?
GitHub 上有什麼值得學習,簡單的,易讀的 Python 項目?
python開發一個項目要怎麼做?
Python 閉包代碼理解?
系統中同時有 python2和 python3,怎麼讓 ipython 選擇不同的版本啟動?

TAG:Python | Python3x |