code4nagoya / covid19-aichi-tools

MIT License
6 stars 5 forks source link

依存ライブラリ群のバージョンを固定するために pyenv sync を使用する #61

Open amay077 opened 4 years ago

amay077 commented 4 years ago

現在は requirements.txt で必要な Python ライブラリ群を記述しているが、GitHub Actions の定期実行時に、ライブラリのバージョンが更新される → 新しいバージョンと他ライブラリ互換性がなく動作しない、などの原因で度々定期実行がエラーとなってきた。

Python にも npm の package-lock.json のような、「インストール時の依存ライブラリ群のバージョンを固定する手法」があるようなので、それを採用したい。

それが以下。

Pipfile.lockで固定された依存関係を再現するならpipenv syncコマンドを使おう | Developers.IO

「ライブラリのバージョンアップが原因で GitHub Actions が失敗することを防ぐ」のが目的なので、上記以外に他の方法があればそれでもよいです。 ライブラリ群をインストールした直後で docker image を作り、それを使うのは代替案の一つですが、docker image のホスト先の検討が必要になります。

imabari commented 3 years ago

バージョン固定こちらでは動かないのでしょうか? pandas == 1.1.5 https://hitoribucho.com/post/20190309191626

amay077 commented 3 years ago

はい、 https://github.com/code4nagoya/covid19-aichi-tools/commit/459e097b60a0189f38c94e2ec59563169176cb0a#diff-4d7c51b1efe9043e44439a949dfd92e5827321b34082903477fd04876edb7552 な感じでバージョン固定させてました。

JavaScript/node だと package-lock.json でバージョン固定させる標準の仕組みがあるのですが、Python では標準の仕組みはないようですね。 なにか事実上標準の扱いやすいバージョン固定方法があれば採用したいなーと思ってのこの issue です。

pip freeze で全てのバージョン固定された requirements.txt を出力できるそうですが、ライブラリが依存する子や孫ライブラリの情報も書き出されてしまって見づらいのかなあと思っています。

現状ライブラリ数は多く無い、またバージョン固定が必須だった pdfminer などのライブラリは使わなくなったので、本 issue の優先度は高くはないです。