Pythonのパッケージマネージャーの一つである"Poetry"についての備忘録
前まではpipを使っていましたが、管理の方法があまりスマートではないと感じたためPoetryを使うことに。
install
`brew install poetry`
HomeBrewでPoetryをインストール
`poetry completions zsh > ~/.zfunc/_poetry`
Poetryの自動補完を追加
./zfuncがないなら、`mkdir ~/.zfunc`で新規作成
~/.zshrcに以下を追加
fpath+=~/.zfunc
autoload -Uz compinit && compinit
パッケージ関連
`poetry new <project-name>`
project-nameという名前の、色々入ったdirectoryを作る。
cargoのnewと近い
ディレクトリ構造
project-name
├── README.md
├── project-name
│ └── __init__.py
├── pyproject.toml
└── tests
└── __init__.py
`poetry new<project-name> --src `
srcフォルダを使いたい場合
`poetry new <folder-name> --name <project-name> `
フォルダとパッケージの名前を分けたい時。
`poetry init`
既存にあるプロジェクトに適応させる。
`poetry install`
仮想環境を作成し、poetry.lockに書いてあるパッケージをインストール。
poetry.lockがなければ、pyproject.tomlを参照する。
--no-dev で、dev用のパッケージを抜いてインストール
`poetry add <package-name>`
仮想環境を作成し、パッケージを追加。
--dev オプションで、dev用のパッケージと明示できる。
pyproject.tomlの[tool.poetry.group.dev.dependencies]下に追記される
<package-name>@~ か @^ か ==○.○.○でバージョンを指定可能
^2.1
2.1.0 以上 3.0.0 未満のバージョン (>=2.1.0, <3.0.0)
~2.05
2.0.5 以上 2.1.0 未満のバージョン (>=2.0.5, <2.1.0)
`poetry remove <pkg-name>`
パッケージを削除。その際は依存関係も削除される
その他コマンド
公式ドキュメントを読もう。
`poetry show`
依存関係全部見る
`poetry show <pkg-name>`で、そのパッケージの依存関係を見れる
`poetry cache list`
cacheのリストを見る。clearコマンドもある。自分で調べよう
`poetry env list`
仮想環境一覧を表示
`poetry update --dry-run`
アップグレードされるパッケージがわかる
`poetry update`
全てのパッケージをアップグレード
poetry.lockが変更され、pyproject.tomlはそのまま
いくつかのパッケージだけupdateしたい場合は、
`poetry update requests toml`と、列挙する
仮想環境でpythonのプログラムを実行するには
`poetry run python <python-file>`
あるいは
`poetry shell python <python-file>`
前者は実行のたびに仮想環境に入り、終わったら元の世界に戻ってくるという実行方法。後者は一旦仮想世界に入って、行きっぱなしのまま実行するという方法。
`poetry shell` の方は、いつもの`source .venv/bin/activate` でも可
`poetry build`
ビルドができるらしい。ライブラリ公開する時にやるやつ
便利設定
`poetry config --list`
設定一覧を表示
`poetry config virtualenvs.in-project true`
.venvフォルダを`{cache-dir}/virtualenvs`ではなく、プロジェクトの中に作る
--localをつければ`poetry.toml`に記述され、その設定自体をgitなどで管理できる
requirements.txtにバージョンを書き出す
Dockerでinstallするためのやつ
`poetry export --without-hashes --output requirements.txt`
--without-hashes
poetry.lockに含まれるバージョンの固有のハッシュを含めない
--output
どのファイルに書き出すかを設定
わざわざ >> を使わなくても大丈夫
--dev
dev用のパッケージもインストールする
使うとしたら本番環境用にrequirements.txtを使用するため、これはなし