標準のpipはシステム全体に依存関係をインストールし、プロジェクト間の依存関係の衝突やバージョンの問題を引き起こすこともあります。これが理由でPythonを嫌厭している人もいるのではないかと思います。
言語も同様に、プロジェクトごとにバージョンを変更することもあるでしょう。そうすると環境構築の重要性はさらに高まります。
この記事では、なぜPythonの依存物管理に「asdf」と「Poetry」を採用したのかを解説します。
Poetryの使い心地
自分はPythonだけでなく、TypeScriptやRustなどの複数のプログラミング言語を扱います。そのため言語に固有のバージョン管理ツール(~env系)を使用すると、環境設定が複雑になりがちです。この問題を解決するために、asdf
を選びました。
Pythonのバージョンだけではなく、poetryのバージョンを管理することもできます。
# Pythonのバージョン管理
asdf plugin-add python
asdf install python <version>
asdf local python <version>
# Poetryのバージョン管理
asdf plugin-add poetry https://github.com/asdf-community/asdf-poetry.git
asdf install poetry <version>
asdf local poetry <version>
asdf
は多言語対応のバージョン管理ツールで、Python、TypeScript、Rustなど多くの言語のバージョン管理を一つのインターフェースで扱えます。これにより、開発環境全体の一貫性を保ちながら、複数の言語のバージョン管理を簡潔に行うことができます。
依存関係管理の効率化
Pythonプロジェクトの依存物管理には、従来pipやrequirements.txtが一般的でしたが、私はnpmやCargoのような依存物管理スタイルを好んでいます。このため、Pythonでも同様のアプローチを採用するために Poetry
を選択しました。
Poetry
は、依存関係の宣言、解決、更新を簡潔に扱うツールです。プロジェクトの依存関係をpyproject.toml
ファイルで一元管理し、npmやCargoに近い使い勝手を提供します。これにより、従来の方法よりもモダンで効率的な依存物管理が可能になります。
プロジェクトの初期化
npm init
# package.json が生成される
poetry init
# pyproject.toml生成される
依存物の追加
npm install [package]
poetry add [package]
どちらも依存物の追加ですね。
poetryもnpmと同様に、--dev
オプションを付けることで開発用の依存物と分けて管理することもできます。
スクリプトの実行
npm run <script>
poetry run python <file-path>
Poetryは、仮想環境内でスクリプトを実行する際にこのコマンドを使用します。これはnpmとは異なりますね。
まとめ
Pythonの開発環境を設定する際、asdf
とPoetry
の組み合わせは、複数の言語を扱う開発者にとっての一貫性と効率性のニーズに応えます。asdf
は言語やツール間のシームレスな統合を、Poetry
は依存関係管理のモダンなアプローチを提供します。これらのツールは、複雑なプロジェクトでもスムーズな開発を実現するための重要な要素です。
余談
依存物管理でいえば、Nixも興味あるのですが複雑そうですが,、いつか使ってみたい。
mise(旧:rtx)もasdfのRust実装で気になってますが、特に不便はないし業務でも使ってないので後回し