python3下安裝aiohttp遇到過的那些坑
python3下安裝aiohttp遇到過的那些坑
n
最近需要用到aiohttp這個庫,在安裝過程中遇到很多坑。google、baidu後,依然沒有找到合適的解決方案。
n後來通過去python官方的PyPI查看aiohttp庫,才發現一些問題,幾經折騰,最後終於成功的在python3下安裝』aiohttp』。
n在這裡跟大家分享一下被坑的過程。
n先說一下環境。
win7,64位。電腦里安裝的python有3.5和3.6兩個版本。
n1. python3.6下安裝aiohttp
n
python3.6環境下,已將pip設置為pip36,類似的python3.5中的pip設置為pip35。
npip36 install aiohttpn
運行結果如下:
google、百度查詢「Command 『python setup.py egg_info』 failed with error code 1 …」 , 參考某些解決方法包括:
n使用pip 安裝python package出現的錯誤:
「Command 」python setup.py egg_info「 failed with error code 1」這個錯誤很可能是 setuptools安裝出現問題。解決:第一步:檢查pip安裝的是不是正確Installation - pip 9.0.1 documentation
第二步:如果pip已經安裝:pip install —upgrade setuptools第三步:如果已經更新了,測試下ez_setup是不是正常安裝了,如果沒有:pip install ez_setup最後,再嘗試:pip install unroll再去 pip 安裝自己需要的package。n
n
以及stackflow和其他各種方法,依然沒能解決問題。
n2. python3.5下安裝aiohttp
n
然後,轉向python3.5,期待在python3.5下能順利地安裝,然而,出現的問題跟python3.6版本一樣。著實讓人費解與惱火。
n
然後,折騰了好久後,去查看aiohttp的官方說明文檔,安裝指南如下:
nLibrary Installation
n$ pip install aiohttp
nYou may want to install optional cchardet library as faster replacement for chardet:
n$ pip install cchardet
nFor speeding up DNS resolving by client API you may install aiodns as well. This option is highly recommended:
n$ pip install aiodns
n
n
由於說明文檔里提到其他環境依賴庫是「may」,我以為不是必須的,也沒在意。不得不說,這個』may』確實會產生誤導。
後來,實在不行,在python36下也進行安裝 『cchardet』和』aiodns』n結果在安裝』aiodns』時,也出現了類似的錯誤「Command 『python setup.py egg_info』 failed with error code 1 …」。
n
3. aiohttp的不同版本
n
最後,去python官網的PyPI中去查看,看看有沒有供參考的內容。
PyPI中搜索』aiohttp』,第一個出來的 『aiohttp 2.0.7』,就是要找的 aiohttp安裝庫。打開』aiohttp 2.0.7』,查看安裝庫的whl文件,界面如下:通過觀察,發現aiohttp庫2.0.7版在windows系統下,沒有python3.5和python3.6的安裝包。而通過pip安裝時,如果不指定版本號,默認安裝的是最新的版本,即』aiohttp 2.0.7』。
n所以,要想在python3.5或python3.6環境下安裝windows系統下的』aiohttp』庫,可能需要安裝』aiohttp』的其他版本。
經過一番研究,發現可以安裝』aiohttp』1.3.3版本。n在PyPI中找到』aiohttp』1.3.3版本,查看其whl安裝文件,如下:
發現』aiohttp』1.3.3版本是有windows系統下可安裝的python36和python35版本的。於是:
n
pip36 install aiohttp==1.3.3
n也出現類似的問題「Command 『python setup.py egg_info』 failed with error code 1 …」。
至此,這個問題在安裝不同package的時候都出現,後來將想,是不是安裝包依賴的其他庫的安裝環境也存在某些系統或python版本下不存在可供安裝的安裝包(或whl文件)。於是,先查看』aiohttp 1.3.3』的安裝依賴庫,如下:nRequires Distributions
nyarl (<0.10,>=0.9.8)
nmultidict (>=2.1.4)
nchardet
nasync-timeout (>=1.1.0)
n
n
請注意』yarl』的版本需求,』yarl』目前最新的版本是0.10.1版,如果pip安裝時不指定版本的話,默認安裝的是』yarl』0.10.1版,這樣也會導致安裝失敗,所以需要進行指定版本安裝,如下:
npip36 install yarl==0.9.8
n
或
npip35 install yarl==0.9.8
n如果你的pip沒有進行過重新設置,則:
npip install yarl==0.9.8
n但是,上述安裝命令同樣會產生類似的錯誤:「Command 『python setup.py egg_info』 failed with error code 1 …」。這是因為,安裝』yarl==0.9.8』需要先安裝multidict庫。
於是,在PyPI中查看』multidict』的whl文件,發現這個庫目前沒有python3.6下可以安裝的安裝包。所以,只能安裝』multidict』在python3.5下的安裝包。繼而,』yarl==0.9.8』以及』aiohttp==1.3.3』也只能安裝python3.5的版本。而』chardet』,通過PyPI查看可知,沒有指定python的版本,直接pip安裝的就可以。n因此,在python3.5下,windows系統中最後成功安裝』aiohttp==1.3.3』的步驟如下:
n
- pip35 install multidict
n
- pip35 install chardet
n
- pip35 install yarl==0.9.8
n
- pip35 install aiohttp==1.3.3
n
n
4. 總結
n
在python下安裝第三方庫的時候,可以需要其他依賴庫,在安裝過程中,如果遇到如下類似的問題:
n「Command 『python setup.py egg_info』 failed with error code 1 …」。
n則可能是環境依賴庫的問題,可以去PyPI中查看第三庫安裝時所依賴的安裝環境,這樣,或許能一步步解決第三方庫安裝時遇到的問題。通過上述描述,希望大家能在後續安裝時避免這些坑。
n
n
更多精彩內容請關注公眾號:
n「Python數據之道」
推薦閱讀:
※Python入門 類class提高篇
※使用pyenv管理多個Python版本依賴環境
※Python:圖片轉字元畫
※python中list, array的轉換