Poetry
windowsの場合はこちら:windowsにpoetryを入れる
/miyamonz/poetry等でdockerfile作る
基本説明
Poetryをサクッと使い始めてみる
新しいPythonのバージョン管理.Python版のyarnみたいなもの
pipenvやpyenv+virtualenvの代替として有用
PoetryにはPythonが必要なので、完全にバージョンから制御したい場合はdocker or pyenv + Poetryの構成が必要
Poetryの特徴
pipとpipenvとpoetryの技術的・歴史的背景とその展望
Poetry の scripts はタスクランナー機能ではない
Poetry = pipenv + build, publish機能
つまり通常開発するだけならpipenvと機能はほぼ変わらない
パッケージマネージャーはまだ安定していない
pyproject.tomlで一括管理できるという点が利点
しかし,タスクランナーの機能が標準では搭載されていないのでそこだけ注意
Poetryのインストール(Unix/WSL2)
公式インストール方法
$ curl -sSL https://install.python-poetry.org | python3 -
パスを通す
$ echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
localに入るため,dockerで構築する際もルートである必要がない
ここで一旦bashを再起動
$ source ~/.bashrc
タブ補完を有効にする
$ poetry completions bash >> ~/.bash_completion
$ source ~/.bash_completion
新規に立ち上げる場合のPoetryの使い方
$ poetry new <project-name>
code:ディレクトリ構成
project_abc
├── README.rst
├── project_abc
│ └── __init__.py
├── pyproject.toml
└── tests
├── __init__.py
└── test_project_abc.py
★srcディレクトリを生成することもできる.こっちの方が好き
$ poetry new <project-name> --name src
code:ディレクトリ構成
project_abc
├── README.rst
├── src
│ └── __init__.py
├── pyproject.toml
└── tests
├── __init__.py
└── test_project_abc.py
新規に立ち上げる場合のPoetryの使い方
プロジェクトのディレクトリに進んだあと
$ poetry init
yarn initみたいな感じで,必要なpyproject.tomlを作成してくれる.
もし
逆にpyproject.tomlが既にあればこの操作をする必要は無いのでdockerで構築する場合などはpoetryのインストールだけでよく,先にpyproject.tomlを用意しておくといい
venvはどこに作られるか
デフォルト:仮想環境をディレクトリ内に作るよう設定
$ poetry config virtualenvs.in-project true
仮想環境を全体対象で作成(dockerで作成する環境などはこちらの方が都合がよい)
$ poetry config virtualenvs.in-project false
環境のセットアップ
$ poetry install --no-root
pyproject.tomlに書いてある依存関係のパッケージをインストールして仮想環境を立ち上げる
./localではなくroot実行である場合はオプションは必要ない issue1227
もしもpoetry.lockファイルがあればそちらを先に見に行く
よって例えば pyproject.tomlに^2.26.0、poetry.lockに version="2.27.0"のときは2.27.0が優先される
仮想環境へのアクセス
$ poetry shell
仮想環境から出る
$ exit
仮想環境外からプログラムを実行する
$ poetry run python app.py
パッケージ管理
追加
$ poetry add <package-name>
--dev (-D): 開発用の依存関係としてパッケージを追加します。
--dry-run : 作業を表示しますが、何も実行しません (暗黙的に --verbose が有効になります)。
削除
$ poetry remove <package-name>
pyproject.tomlを修正するとき
常に以下のコマンドを実行すること
$ poetry update
pyproject.tomlを見に行って,その依存関係が成立するようにpoetry.lockを構成する.
つまり,pyproject.tomlで変更した箇所の互換性をチェックしてくれる.
poetry updateした時に変更されるのはpoetry.lockだけで pyproject.tomlはそのまま
新しいバージョンの新機能を使うなどの場合はpyproject.tomlを手動で修正して依存するバージョンを変える必要がある
パッケージを検索する
パッケージ全体から検索
$ poetry search <package-name>
今入っているものを検索
$ poetry run pip list | grep <package-name>
これでは出ないものが多数ある.代わりにどういった検索がいいのかは分からない
$ poetry shell
$ python
code:py
import <package-name>
print(<package-name>.__version__)
poetryでコマンド実行をできるようにする
$ poetry add poethepoet
$ poetry add --dev taskipy
Poetry の scripts はタスクランナー機能ではない
/PythonOsaka/タスクランナーの選定
他のフォーマットに出力する
$ poetry export -f requirements.txt --output requirements.txt