LoginSignup
0
0

More than 1 year has passed since last update.

PyPi ServerからのPoetry InstallがRetrieved digest for linkエラーとなるようになったので原因調査

Posted at

事象

以下のイメージを使って開発したPythonパッケージをホスティングしています。

ある日、Poetryのインストールが以下のようなエラーとなる事象が発生しました。

  Retrieved digest for link my_package_name-1.0.0-py3-none-any.whl(md5:xxxxxxx) not in poetry.lock metadata ['sha256:xxxxx', 'sha256:xxxxx']

  at /usr/local/lib/python3.8/site-packages/poetry/installation/chooser.py:144 in _get_links
      140│ 
      141│             selected_links.append(link)
      142│ 
      143│         if links and not selected_links:
    → 144│             raise RuntimeError(
      145│                 f"Retrieved digest for link {link.filename}({h}) not in poetry.lock"
      146│                 f" metadata {hashes}"
      147│             )
      148│ 

調査

メッセージを読むと分かるのですが、 md5:xxxxxxx のハッシュと、 sha256:xxxxx のハッシュを比べているので、それはエラーになるなというところです。

このハッシュですが、PyPiサーバの以下のようなURLから取得されています。これが間違っていそうです。

https://pypiserver.local/packages/my-package-name-1.0.0.tar.gz#md5=xxxxx

対応

コンテナを起動するコマンドに --hash-algo sha256 とオプションを付けることで、

docker run pypiserver/pypiserver:v1.5.1 --hash-algo sha256

sha256のURLが生成されるようになります。

https://pypiserver.local/packages/my-package-name-1.0.0.tar.gz#sha256=yyy

後はPoetry側のpoetry.lockを削除してpoetry installするか、poetry lockコマンドで解消します。

もう少し細かい原因

この事象ですが、poetryの1.1系では発生せずに、1.2系で発生する事象です。
ざっとコードとコミットを読んだ感じだと以下のコミットで動作が変わったと思っています。

同じ事象に当たった人の参考になれば幸いです。

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