Open5

[解決済み] poetry add urllib3 が終わらない

tenkeitenkei

Python プロジェクトに urllib3 を導入するため、 poetry add しようとしたがインストールが終わらない。

tenkeitenkei

-vv オプションで詳細なログが見れるらしい。

$ poetry add urllib3 -vv

確かに、なにかエラーっぽいものが出ている。

   0: Duplicate dependencies for urllib3
   0: Different requirements found for urllib3 (>=1.25.4,<1.27) with markers python_version < "3.10" and urllib3 (>=1.25.4,<2.2.0 || >2.2.0,<3) with markers python_version >= "3.10".

urllib3 が重複しているらしい。

tenkeitenkei

元々の lock ファイルを見てみると、urllib3 の記述が既にあった。複数のパッケージから依存されていることが分かる。

結果的に、urllib3 のバージョンとしては以下のようになっていた。

[[package]]
name = "urllib3"
version = "1.26.18"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
files = [
    {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"},
    {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"},
]

[package.extras]
brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]

[[package]]
name = "urllib3"
version = "2.0.7"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
python-versions = ">=3.7"
files = [
    {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"},
    {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"},
]

どうやら 1系と2系が混在している? 1.26.182.0.7 がインストールされていたらしい。

この状況で poetry add urllib3 すると、 pyproject.tml には最新のバージョンが記載されることになる。つまり2系かな。
なので、1系も必要としている lock ファイルの状況と矛盾が起きる…みたいな状況なのかな。

tenkeitenkei

まずは2系をインストールしてみるが、終わらず。

$ poetry add urllib3^2.0.7

次に1系をトライ。無事にインストールが終わった。

$ poetry add urllib3^1.26.18

※ もちろん、将来的には2系に上げないといけないことに注意。

tenkeitenkei

そもそもなぜ1系と2系が lock ファイルに記載されていたのか。

botocore というライブラリが、以下のような依存関係になっていた。

[[package]]
name = "botocore"
version = "1.34.4"
description = "Low-level, data-driven core of boto 3."
category = "main"
optional = false
python-versions = ">= 3.8"
files = [
    {file = "botocore-1.34.4-py3-none-any.whl", hash = "sha256:2026d89a46dfcb96d439db17a277de11b808428cba881deb50a5960b134e3a84"},
    {file = "botocore-1.34.4.tar.gz", hash = "sha256:5dcd63329cb3e65c533a72a68c99b7d07c99a29936ea07d0998120172c10b4f5"},
]

[package.dependencies]
jmespath = ">=0.7.1,<2.0.0"
python-dateutil = ">=2.1,<3.0.0"
urllib3 = [
    {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""},
    {version = ">=1.25.4,<2.1", markers = "python_version >= \"3.10\""},
]

利用者の Python バージョンによって、1系の場合と2系の場合があるっぽい。