0
0

More than 3 years have passed since last update.

pip20.3でプライベートリポジトリにあるパッケージのインストールに失敗した

Posted at

経緯

業務ではGitLab上にPython用パッケージを作成し、pipenvでインストールして使用しています。
ところが2020/12初めにごろにpipenv installがエラーとなりました。

[pipenv.exceptions.InstallError]: WARNING: Generating metadata for package mypkg01-1-0-0 produced metadata for project name mypkg01. Fix your #egg=mypkg01-1-0-0 fragments.
[pipenv.exceptions.InstallError]: ERROR: Requested mypkg01 from git+https://github.com/hoge/mypkg01.git@****#egg=mypkg01-1-0-0 (from -r /tmp/pipenv-3IcLPF-requirements/pipenv-qe3mt8-requirement.txt (line 1)) has different name in metadata: 'mypkg01'
ERROR: Couldn't install package: mypkg01-1-0-0

調査したところpip20.3がリリースされた影響で、pipを20.2.4にダウングレードするか、pipの--use-deprecated=legacy-resolverオプションを使用することで回避できるようです。
ただ、pip21ではオプションすらなくなるそうなので原因を解消すべく調査を続けました。
pipenv run pip install pip==20.2.4pipenv installにて使用するpipをダウングレードすることができます。

原因と解決方法

原因は依存関係の書式でした。
mypkg02パッケージをインストールする際に、依存しているmypkg01をインストールしようとしてmypkg01-1-0-0という名前のパッケージを探してしまっていました。
なお、インストールしようとしていたパッケージの依存関係の定義は以下のように記述していました。

[metadata]
name = mypkg02
version = file:mypkg02/VERSION

[options]
zip_safe = False
packages = find:
python_requires = >=3.0
install_requires =
    mypkg01 @ git+https://github.com/hoge/mypkg01.git#egg=mypkg01-1.0.0

これを下記のように書き換えることで解決しました。

-    mypkg01 @ git+https://github.com/hoge/mypkg01.git#egg=mypkg01-1.0.0
+    mypkg01 @ git+https://github.com/hoge/mypkg01.git@1.0.0#egg=mypkg01

pip20.3では修正前の書式が使用できないようです。
pip20.3のCHANGELOGには上記の変更については記述されていませんでしたが、依存関係の解決方法を変更したとの記述がありますので、その影響だと推測されます。(コードは追ってません。)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0