poetry導入

パッケージ管理は当たり前のようにpipを使っていたけど、poetry使えばpip installとかいらなくなるみたいなので、入れてみる。

導入

sudo curl -sSL https://install.python-poetry.org | python3 -
poetry completions bash >> ~/.bash_completion
poetry config virtualenvs.in-project true

1行目でインストール、2行目はbashの補完を有効に、3行目は自分の好みでvenvをプロジェクトディレクトリ内につくるように設定。

poetry new poetry-demo --src

これでこのディレクトリ構成の新しいプロジェクトが出来上がる。フラットレイアウトでいいなら–srcはいらない。なお、既存プロジェクトには poetry initで導入できるっぽい。

パッケージ入れる

petry add pandas
poetry add pytest -G dev

pip installの代わりはこれで。pyproject.tomlに自動追記されるし、なければ勝手に仮想環境も作ってくれる。

-Gは–groupでも。開発用がちゃんと別管理できるのは嬉しい。requirements-devとかもう作らなくていい。

ちなみにdev以外のグループも作れる。例えばドキュメント作成用パッケージとかあったらdocグループで管理、みたいなことも可能。

なおuninstall は poetry remove ~~~

既存pyproject.tomlからインストール

poetry install
poetry install --with dev # 多分明示しなくてもあれば勝手に入る

npmみたいな感じ。ちなみにpoetry.lockも勝手に作られるみたい。

ただpoetry.lockが存在するときは poetry install 時はlockを元にinstallするみたい。ここはnpmと違うのか。

ローカルのモジュールをadd

poetry add -e ./my-package/

pip install と同じ。–editableでもOK。poetry1.1まではデフォルトでローカルモジュールはeditableだったようだが、1.2から挙動が変わっているので注意。

仮想環境に入る

poetry shell

で仮想環境のshellを開ける。pipenvがこんな感じだった気がするな。

別に仮想環境に入らなくても poetry run python myscript.py で仮想環境上で実行できる。pytestも poetry run pytest で実行可能。

ただなれないのでいつも通り`source .venv/bin/activate`で仮想環境は使うことにしておこうかな。もしかしたらCode Runner周りを整備すればいちいち仮想環境に入らずにこれまでどおりのことができるようになるのかも。

pipyへ登録

poetry build
poetry publish

pipyのアカウントが登録されていればこれで公開できるみたい。poetry publish --build でも可。

プライベートリポジトリでの公開なら poetry publish -r my-repository

その他

設定もろもろ

poetry config --list

Configuration | Documentation | Poetry – Python dependency management and packaging made easy (python-poetry.org)

python変える

poetry env info # 今の設定見る
poetry env list # プロジェクトのpython一覧
poetry env use 3.7
poetry env use /python/path
poetry env use system

pipがいらなくなるといっても裏ではvenvとpipで色々やってくれてるだけなので、環境自体が大きく変わるわけではなさそう。

python

Posted by gran-gran-gran