[Python]Poetryをインストールして使ってみた


はじめに

今までPythonのパッケージ管理は何も考えずにpipを使っていました。(requires.txtで一括インストールなどもラクだったので)
最近poetryを使用する記事や資料を拝見することが多くなったので、今回は試しに使用してみたいと思います。
※誤植などもあると思うので適宜修正しています。

TL;DR

poetryのインストール~一番シンプルな仮想環境の構築まで記載ます。(自分が勉強した際の備忘録)
自分なりの解釈も記載しているので長くなります。

前提環境

pc: mac book pro
shell: zsh
python: v3.9.10(pyenvでインストール。poetryをインストールできるversion。)

インストール

curl、pipを使用する2通りの方法があるようですが、こちらに記載があるcurlの方法でインストールしていきます。

curlでのインストール

下記のコマンドでインストールをします。

# HOMEにいない場合は移動
$ cd

# インストール
$ curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -

インストール後に $HOME/.profile というファイルができるそうです。自分の場合はzprofileという名前でした。(zshだから?)
このファイルを下記のように実行してあげるとパスが通ります。
ファイルの中身はexport PATH="HOME/.poetry/bin:$PATH"です。
(必要に応じて次の変更をしてください。HOME -> $HOME)
なので、zshrcに直接書き込んでもできます。

.profileを使用
# poetryのPATHを通す
$ sh $HOME/.zprofile
直接書き込む
# コマンドで入れる場合
$ echo 'export PATH="$HOME/.poetry/bin:$PATH"' >> ~/.zshrc

# ファイルを編集する場合
$ vim ~/.zshrc
# 一番下(どこでも良いが)に下記を追記
export PATH="$HOME/.poetry/bin:$PATH"

設定の変更をshellに読み込ませるために下記のコマンドを実行するか新しいshellウインドウを開きます。

# shellに変更を適用
$ source ~/.zshrc

pipでのインストール

もし、pipを使う場合は下記のコマンドのようです。

pip install poetry

バージョン確認

PATHを通したらpoetryコマンドでを実行してバージョン確認をしてみます。

$ poetry -V
Poetry version 1.1.13

poetryでの環境構築

プロジェクト作成

公式Dosを参考に実施します。
(日本語の記事もあるようです。)

poetry new

newでプロジェクトの雛形を生成できます。--nameオプションで指定をするとプロジェクト内に作成されるディレクトリの名前を変更できます。デフォルトではプロジェクトと同じ名前になるようです。
--srcオプションでsrcディレクトリの階層をして出来そうです。

$ poetry new my-package
Created package my_package in my-package (--name sampleApp)
$ tree
my-package
├── README.rst
├── my_package(sampleApp)
│   └── __init__.py
├── pyproject.toml
└── tests
    ├── __init__.py
    └── test_my_package.py

2 directories, 5 files

poetry init

poetry initでは pyproject.toml のみ作成できます。
対話形式で質問されるので、必要に応じて入力します。
Package nameは入力無しの場合はカレントディレクトリの名前となります。

$ poetry init

This command will guide you through creating your pyproject.toml config.

Package name [<folder>]:  my-package2
Version [0.1.0]:
Description []:
Author [name <email>, n to skip]:  n
License []:
Compatible Python versions [^3.9]:

Would you like to define your main dependencies interactively? (yes/no) [yes]
...
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 = "my-package2"
version = "0.1.0"
description = ""
authors = ["Your Name <[email protected]>"]

[tool.poetry.dependencies]
python = "^3.9"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"


Do you confirm generation? (yes/no) [yes]

環境のセットアップ

上記までの処理で .toml ファイルができているので、必要があればインストールしたいパッケージなどを追記します。今回は何も修正せずに後で追加するようにします。
poetry newで作成されたディレクトリ内で作業をしていきます。
下記のpyproject.tomlを使用します。

pyproject.toml
[tool.poetry]
name = "my-package"
version = "0.1.0"
description = ""
authors = ["Your Name <[email protected]>"]

[tool.poetry.dependencies]
python = "^3.9"

[tool.poetry.dev-dependencies]
pytest = "^5.2"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

下記のコマンドで仮想環境をスタートします。

$ poetry install
Creating virtualenv my-package in <path>/my-package/.venv
...
Installing the current project: my-package (0.1.0)

仮想環境 my-package が作成されます。この時、仮想環境のpathが表示されますが、設定によってpathは変わってきます。今回はプロジェクト内に作成する設定にしているのでmy-project内に作成されています。設定の変更などは下の方に書きます。

下記のコマンドで作成した仮想環境にアクセスなどできます。

# 仮想環境へのアクセス
$ poetry shell

# 仮想環境から出る
$ exit

仮想環境の外からプログラムなどを実行したい場合はrunを使います。

example
poetry run python app.py

パッケージ管理

パッケージの追加

$ poetry add <package-name>

パッケージの削除

$ poetry remove <package-name>

Poetryの設定

設定の確認

configコマンドでpoetryの設定を確認できます。

$ poetry config --list
cache-dir = "<cache-dir>"
experimental.new-installer = true
installer.parallel = true
virtualenvs.create = true
virtualenvs.in-project = true
virtualenvs.path = "{cache-dir}/virtualenvs"  # <cache-dir>/virtualenvs

virtualenvs.create

仮想環境を作成せずにグローバルでインストールしたい時はこちらの値をfalseにすれば良いでそうです。

$ poetry config virtualenvs.create false

仮想化が必要ない場合は設定しておきましょう。(コンテナ内で使用する場合?)

virtualenvs.in-project

仮想環境を作成する場合はvirtualenvs.pathで指定されたpathに仮称環境が作成されます。
仮想環境をプロジェクト内に作成したい場合はvirtualenvs.in-projectをtrueにします。

$ poetry config virtualenvs.in-project true

既に仮想環境が存在する場合は、適用されないので、既存の仮想環境を削除する必要があるようです。

# 仮想環境のパスを確認
$ poetry shell
Spawning shell within <virtualenvs.path>/my-package-XVicfC3z-py3.9

# 仮想環境が出る
$ exit

# 仮想環境の削除
$ rm -rf <virtualenvs.path>/my-package-XVicfC3z-py3.9

その他

バージョン確認

$ poetry -v

バージョンの更新

$ poetry self update

パッケージの確認

$ poetry show

参考

最後に

poetryの場合は仮想環境構築までできるのは便利かもしれないと思いました。
dockerなどで環境構築するときは仮想環境はいらない?(時と場合によりますね)
peotryで環境作成する際のパッケージ追加をなるべく自動したい。

この記事自体がすごく長くて読みづらいと思うので、将来的にいくつかのセクションごとに分けてみやすくしたいです。