1. 程式人生 > >python3下安裝aiohttp遇到過的那些坑

python3下安裝aiohttp遇到過的那些坑

repl tro dml 解決問題 python版本 noj windows pop idv

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’的步驟如下:

  1. pip35 install multidict
  2. pip35 install chardet
  3. pip35 install yarl==0.9.8
  4. pip35 install aiohttp==1.3.3

4. 總結

在python下安裝第三方庫的時候,可以需要其他依賴庫,在安裝過程中,如果遇到如下類似的問題:

“Command ‘python setup.py egg_info’ failed with error code 1 …”。

則可能是環境依賴庫的問題,可以去PyPI中查看第三庫安裝時所依賴的安裝環境,這樣,或許能一步步解決第三方庫安裝時遇到的問題。通過上述描述,希望大家能在後續安裝時避免這些坑。

更多精彩內容請關註公眾號:

“Python數據之道”

?

python3下安裝aiohttp遇到過的那些坑