10
3

More than 1 year has passed since last update.

poetry installを色んな環境でストレスなく行うworkaround

Posted at

はじめに

poetryPython のパッケージマネージャとしてデファクトになりつつある(個人的な感想)。

poetry では、以下の二つのファイルを使って、ライブラリを管理している
* pyproject.toml ・・・ 使っている Python やライブラリのバージョンを管理
* poetry.lock ・・・ 各ライブラリの実際のバージョンや依存関係を管理

poetry.lock ではライブラリのハッシュ値も持つことで、 poetry install 時のライブラリの探索時間を短くしている。

問題点

poetry.lock はライブラリごとのハッシュ値を持っているので、インストールする先のOSが異なったりすると、以下のようなエラーになる。

  • Installing libclang (12.0.0): Failed

  RuntimeError

  Retrieved digest for link libclang-12.0.0-2-py2.py3-none-win_amd64.whl(sha256:46414009fcee8375ba64ea6c2c43c5b80a63e3a8b679f4293e00aa605b7265aa) not in poetry.lock metadata ['sha256:3b0585dbdc3f3b372340f1efe7c28bf4a5b658d2fb8dc0544a7ef0d2bef40618', 'sha256:6df2f8a2cb75181e3c1e99e5dfca2fd44bb7f84ed12d5112541e03c10384f306', 'sha256:b828cb52cf3f02fb0e0a8fddb9dece7e2ed006f8b4d54ee811cef0471d414367', 'sha256:275126823c60ab5c9fae6a433cbb6a47e4d1b5f668a985fbd6065553dbc7efcc', 'sha256:fadad3bf5fbab50c996eb151adc58c3a7cbee45a9135060c416be7b640372112']

  at /usr/local/lib/python3.8/site-packages/poetry/installation/chooser.py:113 in _get_links
      109│
      110│             selected_links.append(link)
      111│
      112│         if links and not selected_links:
    → 113│             raise RuntimeError(
      114│                 "Retrieved digest for link {}({}) not in poetry.lock metadata {}".format(
      115│                     link.filename, h, hashes
      116│                 )
      117│             )

poetry.lock を削除した状態で poetry install を行うと、上記エラーは発生しなくなるが、
その代わりに各ライブラリの依存関係などをそのタイミングで確認するので、すごく時間がかかる。

解決策

にあるように、 poetry export をして、 pip install -rを行えばよい。
ただ、上記のIssueにあるように最後に poetry install をすると問題は解決しないので、
pip install までで止めておく必要がある。

poetry export --without-hashes --dev --output poetry-requirements.txt
pip install -r poetry-requirements.txt

上記コマンドの補足として、

  • --without-hashes は、poetry.lock で持っているハッシュを出力しないようにするオプション。これをやらないと poetry install と同様な問題に陥ってしまう
  • --dev は、dev-dependencies 分も含めるというオプション。通常の poetry install では含んでいる部分なので、入れておいた方が良いかも(productionレベルだと不要かも)
  • --outout は出力するファイルを指定するオプション。リダイレクトで保存するより、こっちの方がシンプルで良いかなと。

最後に

あくまでも workaround なので、他に良い方法はいくらでもあるかなと思います。
「これいいよ」というのがあれば、コメント頂けると幸いです。

10
3
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
10
3