Poetryを使ったPythonの仮想環境とパッケージ管理について、自分なりに整理してみました。
第1回はasdf+Poetryの組み合わせによる環境構築を中心に、必要性や用語についてまとめていきます。
実際の構築手順や環境複製の記事は下記をご覧ください。
参考記事
大嶋さんの下記記事がわかりやすく、本記事でも引用させていただいております。
Pythonの開発環境構築とPoetry
Pythonの開発環境構築の要素は下記の3つ。
- Pythonのバージョン指定
- 仮想環境
- パッケージ管理
Poetryは仮想環境とパッケージ管理の要素を担当できるツールである。*1
Pythonのバージョン指定については、asdfやpyenvなどのツールを併用することで実現する。
開発環境構築の各要素の解説と必要性
仮想環境
Pythonの仮想環境とは、利用するPythonバージョンやパッケージ、ライブラリをディレクトリ(フォルダ)単位でまとめ、管理できる仕組みである。
ディレクトリ単位で環境が独立するため、ディレクトリでプロジェクト(作成するプログラム)を分けることができる。
例えば、ディレクトリAではPython3.11でWeb関係のパッケージを使い、ディレクトリBではPython3.12で機械学習系のパッケージを使う、といったことが可能になる。
この仕組みにより、ローカル(開発端末内)や他プロジェクトの影響(パッケージバージョンの衝突など)をなくすことができ、管理や他の開発者への共有が容易になる。
したがって、「仮想環境を作る」というのは、「そのディレクトリ内でのみ、指定したPythonバージョンやパッケージが利用できるディレクトリを作る」ことであり、仮想環境の作成・管理ツールの一つがPoetryである。*2
パッケージ管理
Pythonに限らず、利用するパッケージやライブラリは、その言語に対応したパッケージマネージャーというツールで取得や管理を行うのが一般的である。*3
このパッケージマネージャーの機能もPoetryで担当することができる。
Poetryのパッケージマネージャーとしての役割および解決する課題は下記。
- 利用する外部パッケージおよびライブラリの取得や削除
- デフォルトではPyPIから取得される
- パッケージやライブラリ毎にバージョン指定が可能
- 依存関係の解決
- 導入した外部パッケージやライブラリが利用している他のライブラリなど*4を、自動的に取得して一緒に導入してくれる
- 再利用性の向上
- 言語バージョンや導入した外部パッケージおよびライブラリ(依存関係を含む)がファイル化され、他環境で利用可能
- Poetryの場合は、pyproject.tomlおよびpoetry.lockというファイルに記載される
- Poetryを使ってpyproject.tomlとpoetry.lockを読み込むことで、そのディレクトリ内に同じ環境を作ることができる(標準化される)
- 独自パッケージの作成と共有(※今回は深く触れません)
- 言語バージョンや導入した外部パッケージおよびライブラリ(依存関係を含む)がファイル化され、他環境で利用可能
Pythonのバージョン指定
ローカル(開発端末内)に複数のPythonバージョンを導入し、プロジェクトによって利用するPythonバージョンを切り替えて利用するのが一般的である。
例えば、プロジェクトAはPython3.11以降で動作するため、最新かつ安定版のバージョンを積極的に利用したいが、プロジェクトBはPython3.9でしか動作保証されていない、といった場合を解決することができる。
このPythonバージョンの切り替えをディレクトリ(つまり仮想環境)単位で実現するツールとして、asdfやpyenvがある。
これらのツールを介してPythonを導入することで、端末内のデフォルト(global)で利用するPythonバージョンと、特定のディレクトリ配下(local)で利用するPythonバージョンを指定できるようになる。
なお、asdfはPython以外の言語やツールにも対応しており、管理したい言語などのプラグインを導入すれば一元管理できるようになる。
Poetryもasdf経由で導入できる。
関連サイトなど
公式
Udemy講座
冒頭の参考記事の著者による、Python講座です。
asdfとPoetryによる環境構築含め、大変わかりやすいです。
書籍
仮想環境に関する説明が記載されている入門書籍です。
Pythonプログラミングパーフェクトマスター[最新Visual Studio Code対応 第4版] (Perfect Master 192) | 金城俊哉 |本 | 通販 | Amazon