[英]Why is pip installing an incompatible package version?
我在 Ubuntu 上使用 pip 20.0.2,並從需求文件中安裝了一堆需求。 出於某種原因,pip 決定安裝idna==2.9
(link) ,即使這與我直接列出的依賴項之一不兼容。 因此,我在要安裝所有內容的 virtualenv 中使用了python -m pipdeptree -r
,我看到為idna
列出了以下idna
:
idna==2.9
- cryptography==2.3.1 [requires: idna>=2.1]
- requests==2.22.0 [requires: idna>=2.5,<2.9]
- requests-oauthlib==1.3.0 [requires: requests>=2.0.0]
- social-auth-core==3.2.0 [requires: requests-oauthlib>=0.6.1]
- social-auth-app-django==2.1.0 [requires: social-auth-core>=1.2.0]
- responses==0.10.9 [requires: requests>=2.0]
- social-auth-core==3.2.0 [requires: requests>=2.9.1]
- social-auth-app-django==2.1.0 [requires: social-auth-core>=1.2.0]
正如我們所見,我的兩個直接依賴項( cryptography
和requests
)是需要idna
。 根據這些,看起來 pip 應該決定安裝2.8
,因為它是滿足約束的最新版本。
為什么 pip 而不是安裝idna
2.9,如該輸出的第一行所示,以及運行pip install -r requirements.txt
時的此錯誤消息:
ERROR: requests 2.22.0 has requirement idna<2.9,>=2.5, but you'll have idna 2.9 which is incompatible.
編輯:requirements.txt 的內容及其子項,如評論中所要求:
# requirements.txt
-r requirements/requirements-base.txt
-r requirements/requirements-testing.txt
# requirements-base.txt
cryptography~=2.3.1
pyjwt~=1.6.4
requests~=2.22.0
social-auth-app-django~=2.1.0
# requirements-testing.txt
hypothesis~=3.87.0
pytest~=3.6.2
pytest-django~=3.3.2
pytest-cov~=2.5.1
responses~=0.10.5
編輯 2:我創建了一個最小可行的示例。 對於這個例子,這里是 requirements.txt:
cryptography~=2.3.1
requests~=2.22.0
這是我在新目錄中從頭到尾運行的命令:
virtualenv -p python3.6 -v venv
source venv/bin/activate
pip install -r requirements.txt --no-cache-dir
以及完整的輸出:
Collecting cryptography~=2.3.1
Downloading cryptography-2.3.1-cp34-abi3-manylinux1_x86_64.whl (2.1 MB)
|████████████████████████████████| 2.1 MB 2.0 MB/s
Collecting requests~=2.22.0
Downloading requests-2.22.0-py2.py3-none-any.whl (57 kB)
|████████████████████████████████| 57 kB 18.5 MB/s
Collecting asn1crypto>=0.21.0
Downloading asn1crypto-1.3.0-py2.py3-none-any.whl (103 kB)
|████████████████████████████████| 103 kB 65.4 MB/s
Collecting idna>=2.1
Downloading idna-2.9-py2.py3-none-any.whl (58 kB)
|████████████████████████████████| 58 kB 71.4 MB/s
Collecting six>=1.4.1
Downloading six-1.14.0-py2.py3-none-any.whl (10 kB)
Collecting cffi!=1.11.3,>=1.7
Downloading cffi-1.14.0-cp36-cp36m-manylinux1_x86_64.whl (399 kB)
|████████████████████████████████| 399 kB 30.3 MB/s
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1
Downloading urllib3-1.25.8-py2.py3-none-any.whl (125 kB)
|████████████████████████████████| 125 kB 46.7 MB/s
Collecting certifi>=2017.4.17
Downloading certifi-2019.11.28-py2.py3-none-any.whl (156 kB)
|████████████████████████████████| 156 kB 65.1 MB/s
Collecting chardet<3.1.0,>=3.0.2
Downloading chardet-3.0.4-py2.py3-none-any.whl (133 kB)
|████████████████████████████████| 133 kB 60.8 MB/s
Collecting pycparser
Downloading pycparser-2.19.tar.gz (158 kB)
|████████████████████████████████| 158 kB 25.0 MB/s
Building wheels for collected packages: pycparser
Building wheel for pycparser (setup.py) ... done
Created wheel for pycparser: filename=pycparser-2.19-py2.py3-none-any.whl size=111031 sha256=030a1449dd5902f2f03e9e2f8f9cc6760503136a9243e965237a1ece1196502a
Stored in directory: /tmp/pip-ephem-wheel-cache-c_dx8qi5/wheels/c6/6b/83/2608afaa57ecfb0a66ac89191a8d9bad71c62ca55ee499c2d0
Successfully built pycparser
ERROR: requests 2.22.0 has requirement idna<2.9,>=2.5, but you'll have idna 2.9 which is incompatible.
Installing collected packages: asn1crypto, idna, six, pycparser, cffi, cryptography, urllib3, certifi, chardet, requests
Successfully installed asn1crypto-1.3.0 certifi-2019.11.28 cffi-1.14.0 chardet-3.0.4 cryptography-2.3.1 idna-2.9 pycparser-2.19 requests-2.22.0 six-1.14.0 urllib3-1.25.8
Pip 沒有依賴解析器。 如果您告訴它在沒有任何條件的情況下安裝包foo
,您將獲得最新版本的foo
,即使它與您已經安裝的其他包沖突。
存在其他解決方案,如詩歌,它們確實具有保持一切兼容的邏輯。 如果您需要這個,請考慮使用類似的東西而不是普通的 pip。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.