はじめに
これまではrequirements.txt
を使って依存パッケージを管理していたのですが、新しくパッケージを追加するたびに手動で編集する必要がある、開発時のみ使いたいパッケージもまとめて記入しておかないと不便、など少し不満を感じていました。そこで、パッケージのインストールと管理を一度に、半自動で行えるpoetryを試してみました。
以下の記事を参考にしています(リンク先の記事を辿れば本記事の内容はカバーできます)。
- https://qiita.com/ksato9700/items/b893cf1db83605898d8a
- https://qiita.com/m__k/items/8b189f5ad9f688f55ca3
- https://zenn.dev/yag_ays/articles/a6c84622f558ee
- https://www.keisuke69.net/entry/2021/01/10/003548
公式ドキュメントはこちらです。
インストール
mac, linuxの場合は以下のコマンドで追加できます。
curl -sSL https://install.python-poetry.org | python3 -
インストール時にもメッセージが表示されますが、パスを通すために.bashrc
や.zshrc
へ環境変数を追加するのを忘れずに。
poetry --versions
でpoetry
のバージョンが表示されればインストール成功です。
使い方
1. Pythonをセットアップ
Pythonのインストール方法はいくつかありますが、いずれかの方法で導入すれば良いと思います。
- pyenvを使う(異なるバージョンのPythonを使いたい場合)
- brewを使う(特定のバージョンのPythonが使えれば十分な場合)
2. プロジェクトをセットアップ
新規プロジェクトを作成する場合
poetry new <project-name>
上記コマンドを実行すると、現在のディレクトリ以下に<project-name>
という名前のフォルダが作成されます。<project-name>
以下にはREADME.rst
, __init__.py
が入ったディレクトリ<project-name>
、テスト用のディレクトリtests
が作成されます。また、依存環境等を管理するための、pyproject.toml
も作成されます。
既存のプロジェクトをPoetryで管理する場合
管理したいプロジェクトのルートディレクトリで、
poetry init
を実行すると、対話形式で、プロジェクト名や依存関係について入力を求められます。デフォルト値で良い場合はEnter連打でokです。入力が終了すると、pyproject.toml
が作成されます。
3. 仮想環境のセットアップ
poetry install
を実行すると、依存関係があるパッケージ等がインストールされます。開発用の依存関係が不要な場合は、--no-dev
オプションをつけて実行すればokです。依存パッケージに更新がある場合、poetry update
を実行することで更新できます。
仮想環境で用いるPythonバージョンを指定したい場合は、
poetry config virtualenvs.inproject true
poetry env use <python-version>
を実行することで指定できます。
4. 依存パッケージの追加
poetry add <package-name>
を実行することで、依存パッケージを追加できます。--dev
オプションをつけて上記コマンドを実行することで開発用の依存パッケージを追加できます。
Failed to unlock the collection!
というエラーメッセージが表示された場合、以下のコマンドを実行すると解決できます。
keyring --disable
GitHubリポジトリからインストールする場合はpipと同様、
poetry add git+<url>
とすれば良いです。
CUDA対応のPyTorchなど、urlを指定してインストールしたい場合、以下のようにpyproject.toml
に直接記入するのが良いそうです。
[tool.poetry.dependencies]
torch = {url = "https://download.pytorch.org/whl/cu118/torch-2.0.1%2Bcu118-cp310-cp310-linux_x86_64.whl"}
5. 仮想環境で実行
poetry run python <python-file>
あるいは、
poetry shell
で仮想環境用のshellを立ち上げ、そこで実行するなどの方法があります。
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。
コメント