Poetry設定メモ

毎回Poetryを調べてしまうので設定を書いておくことにしました~

Poetryとは


Pythonのパッケージング・依存関係管理のツール。
公式ページより以下抜粋

1
2
Poetry は setup.py, requirements.txt, setup.cfg, MANIFEST.in, Pipfile を
シンプルな pyproject.toml ベースのプロジェクトフォーマットで置き換えます。

自分の理解

  • パッケージング: パッケージ作成、パッケージインストールなどを意味

    • パッケージ作る時にsetup.pyとか作成してたけど.tomlに記載すればOKだよ~
    • 使っているライブラリをrequirements.txtで管理・共有していたけど、それも.tomlに記載するからOKだよ~
  • 依存関係管理:各ライブラリのバージョンや依存するライブラリを管理的な意味

  • あるプロジェクトで使用するパッケージを管理してpoetry installコマンド一発で環境作れたり便利

  • あるプロジェクトで使用するタスク(テストなど)のコマンドを作成できる

  • npmと同じですね(あんまりわかってないけどw)

  • 参考

インストール


インストール方法のうち、With the official installerの方法でインストールしておけばOK

  • Linux or WSL
    1
    
    curl -sSL https://install.python-poetry.org | python3 -
    
  • Windows
    1
    
    (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
    

ちなみに、インストールディレクトリはユーザーのディレクトリになる。具体的には以下。

  • Linux
    • ~/.local/share/pypoetry
  • Windows
    • %APPDATA%\pypoetry

[オプション]補完設定

poetry help completionsで自身のシェルに合った方法で completion設定すればOK

  • zshの場合
    1
    2
    3
    
    $ poetry completions zsh > ~/.zfunc/_poetry
    $ fpath+=~/.zfunc
    $ autoload -Uz compinit && compinit
    

プロジェクト作成


  • 新規作成の場合(フォルダごと作成)
    1
    
    $ poetry new <project-name>
    
  • 既存プロジェクトの場合
    1
    
    $ poetry init
    

仮想環境設定


デフォルトでは.cacheディレクトリに作成されるので
以下のコマンドでプロジェクトディレクトリ直下に作成するように設定

1
$ poetry config virtualenvs.in-project true

.cacheディレクトリの仮想環境が使用されてしまう場合
以下のコマンドで削除する。

1
2
3
4
$ poetry env list
{project-name}-yK4ZI5OY-py3.9
$ poetry env remove {project-name}-yK4ZI5OY-py3.9
Deleted virtualenv: /home/vscode/.cache/pypoetry/virtualenvs/{project-name}-yK4ZI5OY-py3.9

スクリプト実行方法


  • 単純に.pyファイルを実行する場合
    1
    
    $ poetry run python hoge.py
    
  • poetry addで入れたCLIが使えるライブラリの場合
    1
    
    $ poetry run pytest
    

poetry.lockファイル


lockだけに、ダウンロードしたパッケージのバージョンを
poetry.locファイルに書き込んでプロジェクトでバージョンをロックする。

事前にpoetry.lockが存在している場合に、poetry installを実行すると
.tomlのリストした依存関係を解決してインストールする。 ただ、poetry.lockファイルにリストされている依存関係を守ってインストールされるので最新バージョンでない可能性がある。
依存関係が変更されてプロジェクトが壊れるのを防いでくれている。

個人的な理解

  • バージョン管理(Git)等にコミットする方が望ましい
    • 他の人が自分と同じ環境を作れるから
  • 最新バージョンにしたい場合
    • lockファイルを削除して新しく入れなおす?
    • lockファイルの最新版に上書きする?
    • poetry update?

依存関係グループ


プロジェクトのテストやドキュメントのビルドにのみ必要な依存関係などを 個別に管理できる。

新規の依存グル-プ

  • 直接記述する場合

    • tool.poetry.group.<group名>.dependenciesでグループを作成する
    1
    2
    3
    4
    5
    6
    7
    8
    
    [tool.poetry.dependencies]  # main dependency group
    
    
    [tool.poetry.group.test]  # This part can be left out
    
    [tool.poetry.group.test.dependencies]
    pytest = "^6.0.0"
    pytest-mock = "*"
    
  • コマンドで作成する場合

    1
    
    $ poetry add <パッケージ> --group <グループ名>
    
  • グループを指定したインストール

    1
    
    $ poetry install --only <グループ名>
    
  • グループを削除する場合

    1
    
    $ poetry remove mkdocs --group <グループ名>
    

パッケージング


以下のコマンドでパッケージング

1
$ poetry build

実行後distディレクトリが作成され、配下に以下が作成される。(2種類)

  • .whlファイル
  • tar.gz

CLIツール作成時


  1. project.tomlに以下のscriptsを追加する
    命名規則はpackage.submodule:function
    1
    2
    
    [tool.poetry.scripts]
    my_package_cli = 'my_package.console:run'
    
  2. 再インストール
    1
    
    $ poetry install
    
  3. 仮想環境に入る
    1
    
    $ poetry shell
    
  4. 作成したCLIコマンドを実行
    1
    
    $ hoge xxx
    

※タスクランナーはpoetryではない ※scriptsで使えそうだけど(参考)

タスクランナーを導入


taskipyがいいらしい。

  1. パッケージインストール
    1
    
    $ poetry add --dev taskipy # devは必要であれば
    
  2. project.tomlに記載する
    1
    2
    3
    
    [tool.taskipy.tasks]
    example = "python examples/example.py"
    test = "pytest tests"
    

参考

Built with Hugo
テーマ StackJimmy によって設計されています。