経緯
業務では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.4
でpipenv 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には上記の変更については記述されていませんでしたが、依存関係の解決方法を変更したとの記述がありますので、その影響だと推測されます。(コードは追ってません。)