python3下安裝aiohttp遇到過的那些坑
最近需要用到aiohttp這個庫,在安裝過程中遇到很多坑。google、baidu后,依然沒有找到合適的解決方案。
后來通過去python官方的PyPI查看aiohttp庫,才發現一些問題,幾經折騰,最后終於成功的在python3下安裝’aiohttp’。
在這里跟大家分享一下被坑的過程。
先說一下環境。
win7,64位。
電腦里安裝的python有3.5和3.6兩個版本。
1. python3.6下安裝aiohttp
python3.6環境下,已將pip設置為pip36,類似的python3.5中的pip設置為pip35。
pip36 install aiohttp
運行結果如下:
google、百度查詢“Command ‘python setup.py egg_info’ failed with error code 1 …” , 參考某些解決方法包括:
使用pip 安裝python package出現的錯誤:
“Command ”python setup.py egg_info“ failed with error code 1”
這個錯誤很可能是 setuptools安裝出現問題。
解決:
第一步:檢查pip安裝的是不是正確
https://pip.pypa.io/en/stable/installing/
第二步:如果pip已經安裝:
pip install —upgrade setuptools
第三步:如果已經更新了,測試下ez_setup是不是正常安裝了,如果沒有:
pip install ez_setup
最后,再嘗試:
pip install unroll
再去 pip 安裝自己需要的package。
以及stackflow和其他各種方法,依然沒能解決問題。
2. python3.5下安裝aiohttp
然后,轉向python3.5,期待在python3.5下能順利地安裝,然而,出現的問題跟python3.6版本一樣。着實讓人費解與惱火。
然后,折騰了好久后,去查看aiohttp的官方說明文檔,安裝指南如下:
Library Installation
$ pip install aiohttp
You may want to install optional cchardet library as faster replacement for chardet:
$ pip install cchardet
For speeding up DNS resolving by client API you may install aiodns as well. This option is highly recommended:
$ pip install aiodns
由於說明文檔里提到其他環境依賴庫是“may”,我以為不是必須的,也沒在意。不得不說,這個’may’確實會產生誤導。
后來,實在不行,在python36下也進行安裝 ‘cchardet’和’aiodns’
結果在安裝’aiodns’時,也出現了類似的錯誤“Command ‘python setup.py egg_info’ failed with error code 1 …”。
3. aiohttp的不同版本
最后,去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’。
所以,要想在python3.5或python3.6環境下安裝windows系統下的’aiohttp’庫,可能需要安裝’aiohttp’的其他版本。
經過一番研究,發現可以安裝’aiohttp’1.3.3版本。
在PyPI中找到’aiohttp’1.3.3版本,查看其whl安裝文件,如下:
發現’aiohttp’1.3.3版本是有windows系統下可安裝的python36和python35版本的。於是:
pip36 install aiohttp==1.3.3
也出現類似的問題“Command ‘python setup.py egg_info’ failed with error code 1 …”。
至此,這個問題在安裝不同package的時候都出現,后來將想,是不是安裝包依賴的其他庫的安裝環境也存在某些系統或python版本下不存在可供安裝的安裝包(或whl文件)。於是,先查看’aiohttp 1.3.3’的安裝依賴庫,如下:
Requires Distributions
yarl (<0.10,>=0.9.8)
multidict (>=2.1.4)
chardet
async-timeout (>=1.1.0)
請注意’yarl’的版本需求,’yarl’目前最新的版本是0.10.1版,如果pip安裝時不指定版本的話,默認安裝的是’yarl’0.10.1版,這樣也會導致安裝失敗,所以需要進行指定版本安裝,如下:
pip36 install yarl==0.9.8
或
pip35 install yarl==0.9.8
如果你的pip沒有進行過重新設置,則:
pip install yarl==0.9.8
但是,上述安裝命令同樣會產生類似的錯誤:“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安裝的就可以。
因此,在python3.5下,windows系統中最后成功安裝’aiohttp==1.3.3’的步驟如下:
pip35 install multidict
pip35 install chardet
pip35 install yarl==0.9.8
pip35 install aiohttp==1.3.3
4. 總結
在python下安裝第三方庫的時候,可以需要其他依賴庫,在安裝過程中,如果遇到如下類似的問題:
“Command ‘python setup.py egg_info’ failed with error code 1 …”。
則可能是環境依賴庫的問題,可以去PyPI中查看第三庫安裝時所依賴的安裝環境,這樣,或許能一步步解決第三方庫安裝時遇到的問題。通過上述描述,希望大家能在后續安裝時避免這些坑。
更多精彩內容請關注公眾號:
“Python數據之道”