以前の記事でPythonのパッケージ管理ソフトとしてPipenvをご紹介しましたが、私自身Pipenvを使用していたのは去年の途中まででした。
去年からはPipenvに代わってPoetryというパッケージ管理ソフトを使用していたので、Poetryについても紹介したいと思います。
Poetryとは
Poetry はPEP518で標準化されたpyproject.tomlを使ったパッケージ管理を行います。PoetryもPipenvと同じく、pipとvenvを組み合わせたパッケージ管理ツールです。今回もubuntu18.04の環境にインストールしてみたいと思います。
検証環境はVagrantを使って作成しています。Vagrantの使い方ついては下記の記事をどうぞ
Poetry のインストール
Poetryは pipコマンドでインストールすることができます。
$ pip install poetry
インストールができたことを確認するため、Poetryのバージョンを確認してみましょう。
$ poetry -V Poetry version 1.0.9
Poetryの使い方
プロジェクトの作成
Poetryのプロジェクトの作成方法です。Poetryではpoetry new
コマンドとpoetry init
コマンドの2種類のプロジェクト作成方法があります。それぞれについてみてみましょう。
poetry new
コマンド
poetry new
コマンドはPythonプロジェクトの雛形から作成してくれるコマンドです。poetry new
の後に作成したいパッケージ名を入力します。今回はtest-pkg
という名前で実行してみたいと思います。
$ poetry new test-pkg
Created package test_pkg in test-pkg
実行するとカレントディレクトリにtest-pkgという名前でディレクトリが作成されます。作成されたディレクトリ構造は下記の通りです。
$ tree test-pkg/ test-pkg/ ├── pyproject.toml ├── README.rst ├── test_pkg │ └── __init__.py └── tests ├── __init__.py └── test_test_pkg.py 2 directories, 5 files
このようにディレクトリ作成から行いたいときはpoetry new
を使うといいと思います。
poetry init
コマンド
poetry init
コマンドはプロジェクトに pyproject.toml がない場合に新規作成するためのコマンドです。 既にプロジェクトディレクトを作成している場合によく使います。
$ poetry init
This command will guide you through creating your pyproject.toml config.
上記コマンドを実行すると対話式で情報を入力できる状態になります。
Package name [test-pkg]: Version [0.1.0]: Description []: Author [None, n to skip]: n License []: Compatible Python versions [^3.6]: Would you like to define your main dependencies interactively? (yes/no) [yes] You can specify a package in the following forms: - A single name (requests) - A name and a constraint (requests ^2.23.0) - A git url (git+https://github.com/python-poetry/poetry.git) - A git url with a revision (git+https://github.com/python-poetry/poetry.git#develop) - A file path (../my-package/my-package.whl) - A directory (../my-package/) - A url (https://example.com/packages/my-package-0.1.0.tar.gz) Search for package to add (or leave blank to continue): Would you like to define your development dependencies interactively? (yes/no) [yes] Search for package to add (or leave blank to continue): Generated file [tool.poetry] name = "test-pkg" version = "0.1.0" description = "" authors = ["Your Name <you@example.com>"] [tool.poetry.dependencies] python = "^3.6" [tool.poetry.dev-dependencies] [build-system] requires = ["poetry>=0.12"] build-backend = "poetry.masonry.api" Do you confirm generation? (yes/no) [yes]
対話が完了すると、pyproject.toml
ファイルが生成されます。
仮想環境の作成先をProjectと同じディレクトリに設定する
デフォルトだとvenvで作成される仮想環境はpoetry config --list
で表示されるvirtualenvs.path
に設定されているディレクトリ配下に共通的に生成されます。
$ poetry config --list cache-dir = "/home/vagrant/.cache/pypoetry" virtualenvs.create = true virtualenvs.in-project = false virtualenvs.path = "{cache-dir}/virtualenvs" # /home/vagrant/.cache/pypoetry/virtualenvs
これはデフォルトでvirtualenvs.in-project
の設定値がfalse
となっているためであり、プロジェクトディレクトリ毎に仮想環境を作成するためには、下記コマンドを実行して設定値をtrue
にする必要があります。
$ poetry config virtualenvs.in-project true
上記コマンドを実行した結果、正しく反映されているかを確認しましょう。
$ poetry config --list cache-dir = "/home/vagrant/.cache/pypoetry" virtualenvs.create = true virtualenvs.in-project = true virtualenvs.path = "{cache-dir}/virtualenvs" # /home/vagrant/.cache/pypoetry/virtualenvs
virtualenvs.in-project
の設定値がtrue
となっていれば設定が反映されています。
Pythonパッケージの追加
Pythonパッケージをプロジェクトに追加する場合はpoetry add
コマンドを実行します。
$ poetry add <追加したいPythonパッケージ>
例えば、requests
パッケージをインストールしたい場合は下記のように実行します。
$ poetry add requests
バージョンを指定してPythonパッケージを追加する
Pythonパッケージのバージョンを指定してプロジェクトに追加する場合はpoetry add
コマンドでパッケージ名を指定するときにバージョン情報を付与します。
例えば、requestsは執筆日現在の最新バージョンは2.23.0ですが、例えば2.20.0をインストールしたい場合、は下記の通りに指定します。
$ poetry add requests@^2.20.0
または下記の通りに指定します。
$ poetry add "requests>=2.20.0"
追加したパッケージを削除する
Pythonパッケージを削除する場合はpoetry remove
コマンドを実行します。
$ poetry remove requests
開発環境用にパッケージを追加する
$ poetry add --dev flake8 autopep
プロジェクトにインストール済みのPythonパッケージを確認する。
プロジェクトにインストール済みのPythonパッケージを確認したい場合はpoetry show
コマンドを実行します。このプロジェクトにどんなパッケージ入れてたか確認したいときに使用しますが、ついついpyproject.tomlファイルをcatしがち。
$ poetry show
Poetryで管理している仮想環境でプログラムを実行する。
プロジェクトの仮想環境内でプログラムを実行します。
$ poetry run <実行したいコマンド>
Pipenvと同様にpoetry shell
コマンドで仮想環境内に入ることもできます。
$ poetry shell
pyproject.tomlファイルの内容をインストールする
既にあるpyproject.tomlファイルの内容をプロジェクトにインストールしたい場合はインストールしたいpyproject.tomlをファイルをプロジェクト配下に配置し、poetry install
コマンドを実行します。
$ poetry install
おまけ:Poetryでrequirements.txtからパッケージをインストールする
PoetryではPipenvのようにrequirements.txtからのインストールができません。Ubuntu環境ではShellコマンドでrequirements.txt内のパッケージをひとつづつfor分で回して、poetry add
していくのがベストプラクティスかと思います。
① 事前にpoetry環境を作成する
$ poetry init
または
$ poetry new hogehoge
② for文を使ってrequirements.txtの中身をpoetry add
する
$ for package in &(cat requirements.txt);do poetry add "$(package)"; done