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

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

n

最近需要用到aiohttp這個庫,在安裝過程中遇到很多坑。google、baidu後,依然沒有找到合適的解決方案。

n

後來通過去python官方的PyPI查看aiohttp庫,才發現一些問題,幾經折騰,最後終於成功的在python3下安裝』aiohttp』。

n

在這裡跟大家分享一下被坑的過程。

n

先說一下環境。

win7,64位。

電腦里安裝的python有3.5和3.6兩個版本。

n

1. python3.6下安裝aiohttp

n

python3.6環境下,已將pip設置為pip36,類似的python3.5中的pip設置為pip35。

n

pip36 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和其他各種方法,依然沒能解決問題。

n

2. python3.5下安裝aiohttp

n

然後,轉向python3.5,期待在python3.5下能順利地安裝,然而,出現的問題跟python3.6版本一樣。著實讓人費解與惱火。

n

然後,折騰了好久後,去查看aiohttp的官方說明文檔,安裝指南如下:

n

Library Installation

n

$ pip install aiohttp

n

You may want to install optional cchardet library as faster replacement for chardet:

n

$ pip install cchardet

n

For 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』的安裝依賴庫,如下:

n

Requires Distributions

n

yarl (<0.10,>=0.9.8)

n

multidict (>=2.1.4)

n

chardet

n

async-timeout (>=1.1.0)

n

n

請注意』yarl』的版本需求,』yarl』目前最新的版本是0.10.1版,如果pip安裝時不指定版本的話,默認安裝的是』yarl』0.10.1版,這樣也會導致安裝失敗,所以需要進行指定版本安裝,如下:

n

pip36 install yarl==0.9.8

n

n

pip35 install yarl==0.9.8

n

如果你的pip沒有進行過重新設置,則:

n

pip 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

  1. pip35 install multidict
  2. n

  3. pip35 install chardet
  4. n

  5. pip35 install yarl==0.9.8
  6. n

  7. pip35 install aiohttp==1.3.3
  8. 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的轉換

TAG:Python | Python教程 | Python库 |