• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

poetry

date: 2021-08-04 excerpt: poetryの使い方

tag: poetrypackage managerpython


poetryの使い方

概要

  • requirements.txtに変わるパッケージマネージメント
  • pipでインストールするより、厳格に依存を管理する
    • pipでは環境を作れるのに、poetryでは通らないケースがある
  • venvをgit initの感覚で使用できる
    • 環境を汚染するかもしれないパッケージを使用してもグローバルを汚染しない

ドキュメント

  • 公式
  • cheatsheet

install

Linux, macOS, Windows(WSL)

$ curl -sSL https://install.python-poetry.org | python3 -

ubuntu

$ sudo apt install python3-poetry

uninstall

$ curl -sSL https://install.python-poetry.org | python3 - --uninstall
$ rm -rf ~/.poetry

projectの作成

$ poetry new <project-name> # 新規にディレクトリを作成する場合
$ poetry new . # 現在のディレクトリを新規に管理する場合

既存のディレクトリをpoetry管理

$ poetry init

envに入る

$ poetry shell

envに入っているかどうかの確認

$ which python3
# ~/Library/Caches/pypoetry/virtualenvs/tests-lightweight-mmm-tlHTGgKh-py3.10/bin/python3 などのようにpoetryのvenvのバイナリを指しているかで判断

envの確認

$ poetry env list

envの削除

$ poetry env remove env-name

envの外からpoetryの環境でコマンドを実行する

  • poetry runを利用することで、poetry shellで発生する可能性がある(システムPATHが交じることによる)PATHの優先順位の問題による不整合などを回避できる
$ poetry run python3 script-name # pythonのスクリプトを実行する場合
$ poetry run jupyter lab --port 2000 # PATH汚染を回避してjupyterを実行する場合

pyenvと組み合わせて特定のバージョンのpythonを使用する

  • 例として3.11.4を使用する場合を記す
$ cd <poetry-project>
$ pyenv local 3.11.4
# pyproject.tomlを編集してpythonバージョンを3.11.4に固定
$ poetry env use python3.11
$ poetry install

パッケージのインストール

$ poetry add package-name
  • addしたパッケージは自動でpoetry.tomlに追加される

依存のインストール

$ poetry install
  • poetry.tomlを参照してインストールされる

poetry.lockとpoetry.toml

  • poetry.tomlだけでも環境構築できるが完全に再現するにはpoetry.lockも利用する

scriptの実行

$ poetry run script

scriptの追加

  1. project.tomlを編集
[tool.poetry.scripts]
test = 'scripts:test'
  1. ルートディレクトリにscripts.pyを作成
import subprocess

def test():
    """
    Run all unittests. Equivalent to:
    `poetry run python -u -m unittest discover`
    """
    subprocess.run(
        ['python', '-u', '-m', 'unittest', 'discover']
    )
  1. 実行
$ poetry run test

トラブルシューティング

poetryのパッケージが壊れる

  • 原因
    • pythonのバージョンのアップグレードや混在で壊れる
  • 対応
    • poetryを一度アンイストールして、rm -rf ~/.poetryして再度インストール

pyarrowがaddできない

  • 原因
    • pipを最新化する必要があった
  • 対応
    • pipを最新化してpoetry add pipする

poetryを使ったDockerfileのテンプレート

FROM python

ENV POETRY_VIRTUALENVS_CREATE=false # poetry経由でインストールしたライブラリを参照可能にするのに必要

RUN apt-get update -y && apt-get install -y
RUN pip install --upgrade pip && pip install poetry

WORKDIR /app
COPY . /app/

RUN poetry install --no-ansi --no-interaction

CMD sh -c "<command>"


poetrypackage managerpython Share Tweet