2020/01/06

Python Tips: Poetry の tips あれこれ



あけましておめでとうございます。

ここで言う Poetry とは Python のパッケージ管理ツールのことです。


Poetry はアプリケーション開発とパッケージ開発のどちらでも利用できるものですが、私は現状アプリケーション開発のみで Poetry を使っています。そのため、以下にあげるのはすべてアプリケーション開発で Poetry を利用するときの tips です。

この記事では Poetry のバージョン 1.0.0 が対象です。 Poetry はわりと安定している(=使い方がコロコロと変わりづらい)ツールですが、バージョンが上がるとやり方が変わる可能性があるので参考にされる際はご注意ください。

  • venv のファイルをプロジェクトディレクトリの下に置きたい
  • venv を作らずグローバルにパッケージをインストールしたい
  • アップデート可能なパッケージをチェックしたい
  • Poetry 自体をアップデートしたい
  • Docker コンテナでインストールしたい
  • どんなサブコマンドがあるのか忘れた
  • サブコマンドのオプションにどんなものがあるか忘れた
  • サブコマンドをタブ補完してほしい

venv のファイルをプロジェクトディレクトリの下に置きたい


→ 設定値 virtualenvs.in-project の値を true に変更します。

すべてのプロジェクトに適用する場合は次のとおりにします。

poetry config virtualenvs.in-project true

カレントプロジェクトにのみ適用する場合は --local オプションを付けます。

poetry config --local virtualenvs.in-project true

設定した値を初期状態にリセットしたいときは poetry config コマンドの --unset オプションを利用します。

グローバルな設定を削除:

poetry config --unset virtualenvs.in-project

プロジェクトローカルな設定を削除:

poetry config --local --unset virtualenvs.in-project

ちなみに、デフォルトでは Poetry は venv のファイルをホームディレクトリ以下の特定のディレクトリに集約して置くようになっています(私の手元の macOS 上で確認すると /Users/USERNAME/Library/Caches/pypoetry/virtualenvs でした)。

参考:

virtualenvs.in-project: boolean

Create the virtualenv inside the project's root directory. Defaults to false.


venv を作らずグローバルにパッケージをインストールしたい


→ 設定値 virtualenvs.create の値を false にします。

poetry config virtualenvs.create false

この設定が有用な場面はかぎられますが、このオプションの存在を覚えておくといざというときに便利です。

参考:

virtualenvs.create: boolean

Create a new virtual environment if one doesn't already exist. Defaults to true.


アップデート可能なパッケージをチェックしたい


poetry show コマンドの --outdated オプションを使用します。

poetry show --outdated

実際のアップデート処理を仮実行して確認したい場合は poetry update コマンドの --dry-run オプションが使えます。

poetry update --dry-run

参考:


Poetry 自体をアップデートしたい


poetry self update サブコマンドを使用します。

poetry self update

Poetry のバージョン 1.0.0 未満の頃は self:update というサブコマンドでしたが、変更されたようです。

万が一うまく行かない場合は公式の手順に従っていったんアンインストールしてからインストールし直すと解決する可能性があります。

Docker コンテナでインストールしたい


→ 単純に公式の手順に従ってインストールします。

公式の python:3.8 イメージの上にインストールする場合のサンプルは次のとおりです。

Dockerfile:



どんなサブコマンドがあるのか忘れた


→ サブコマンド無しで単に poetry と打つか help サブコマンドを使用します。

poetry

poetry help

サブコマンドのオプションにどんなものがあるか忘れた


poetry help コマンドにサブコマンド名を引数として渡します。

poetry help self

次のような内容が見やすい色付きで出力されます。

USAGE
      poetry self
  or: poetry self update [--preview] []

COMMANDS
  update
    Updates Poetry to the latest version.

                The version to update to.

    --preview            Install prereleases.

GLOBAL OPTIONS
  -h (--help)            Display this help message
  -q (--quiet)           Do not output any message
  -v (--verbose)         Increase the verbosity of messages: "-v" for normal output, "-vv" for more verbose output and "-vvv" for debug
  -V (--version)         Display this application version
  --ansi                 Force ANSI output
  --no-ansi              Disable ANSI output
  -n (--no-interaction)  Do not ask any interactive question

これを読んでもわからないことがあれば公式のドキュメントを読みます:


サブコマンドをタブ補完してほしい


poetry completions コマンドの出力を起動時のスクリプトに追加します。

公式で紹介されている macOS + Homebrew を使用している場合のサンプルは次のとおりです。

# Bash (macOS/Homebrew)
poetry completions bash > $(brew --prefix)/etc/bash_completion.d/poetry.bash-completion

参考:


古い設定値を削除したい


→ Poetry のバージョンアップによって使われなくなった設定値を削除するには、設定値が格納されたファイルを直接編集して該当行を削除します。これは poetry config --unset が効かない場合のみ使用します。

私が確認した環境( macOS / CentOS 7 )ではそのファイルは ~/.config/pypoetry/config.toml にありました。拡張子が示すとおり中身は TOML フォーマットです。

vi ~/.config/pypoetry/config.toml

以上 Poetry の tips 集でした。