pipenvのプロジェクトをpoetryに移行してみたので メモ.

公式のpoetryのドキュメント

インストール

$ curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python

poetryの更新

$ poetry update

依存しているパッケージだけアップデート

$ poetry update {package-name}

プロジェクトの雛形を作成

$ poetry new poetry-sample    # poetry-sampleという名前のプロジェクトを作成
$ tree poetry-sample
poetry-sample
├── README.rst
├── poetry_sample
│   └── __init__.py
├── pyproject.toml
└── tests
    ├── __init__.py
    └── test_poetry_sample.py

poetryではpyproject.tomlという設定ファイルが使われます. pyproject.tomlPEP 621で承認された 公式のフォーマットです.

もちろん setup.pysetup.cfgなども使うこともできますが, これらを統合することがpyproject.tomlの目的の一つになっています.

ただし, 現状flake8やmypyはpyproject.tomlに対応していません.

なので 自分としては setup.cfgにはツールの設定を書き, それ以外はpyproject.tomlにくくりだしています.

$ cat poetry-sample/pyproject.toml
[tool.poetry]
name = "poetry-sample"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]

[tool.poetry.dependencies]
python = "^3.7"

[tool.poetry.dev-dependencies]
pytest = "^5.2"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

仮想環境を作成する

pyproject.tomlのあるディレクトリでpoetry installを実行すると 仮想環境が作成されます.

デフォルトでは開発環境用の仮想環境が作成されます.

$ poetry install
Creating virtualenv poetry-sample in /Users/yassu/repos/Tmp/poetry-sample/.venv
Updating dependencies
Resolving dependencies... (0.3s)

Writing lock file


Package operations: 11 installs, 0 updates, 0 removals

  - Installing zipp (3.1.0)
  - Installing importlib-metadata (1.7.0)
  - Installing pyparsing (2.4.7)
  - Installing six (1.15.0)
  - Installing attrs (19.3.0)
  - Installing more-itertools (8.4.0)
  - Installing packaging (20.4)
  - Installing pluggy (0.13.1)
  - Installing py (1.9.0)
  - Installing wcwidth (0.2.5)
  - Installing pytest (5.4.3)
  - Installing poetry-sample (0.1.0)

単にpyproject.tomlを作成するには

$ poetry init

を実行する.

ライブラリのインストール方法

poetry add {package1} {package2} ...でpoetryの仮想環境にインストールされます:

$ poetry add json5 numpy
$ poetry install

develop用の依存ライブラリの追加

$ poetry add -D ipython flake8 pytest pytest-cov
$ poetry install

仮想環境での実行方法

$ poetry shell   # 仮想環境の中に入る
$ poetry run python  # 仮想環境でpythonコマンドを実行する

poetryの設定を確認

$ poetry config --list
cache-dir = "/Users/yassu/Library/Caches/pypoetry"
virtualenvs.create = true
virtualenvs.in-project = false

仮想環境をプロジェクトディレクトリの中に作成するようにする

$ poetry config virtualenvs.in-project true

プロジェクトのバージョンを取得する

もともとpythonのプロジェクトでは__init__.py

__VERSION__ = "1.0.0"

などと書いて __VERSION__の値を他のプログラムの中から使っていました. poetryを使っているとバージョンをpyproject.tomlの中に書くことになりますが, その値は次のように取得することができます:

import pkg_resources

__VERSION__ = pkg_resources.get_distribution("package-name").version

プロジェクトをビルドする

以下のコマンドを作成することでsdist及びwheel形式のアーカイブを作成することができます.

$ poetry build
Building poetry-sample (0.1.0)
 - Building sdist
 - Built poetry-sample-0.1.0.tar.gz

 - Building wheel
 - Built poetry_sample-0.1.0-py3-none-any.whl
$ ls dist
poetry-sample-0.1.0.tar.gz           poetry_sample-0.1.0-py3-none-any.whl

プロジェクトを公開する

プロジェクトを公開するには(ビルドしてから)以下のコマンドを実行します.

$ poetry publish

ビルドも一度に実行するには 以下のコマンドを実行します.

$ poetry publish --build

最後に

poetryのpyproject.toml読もう.



外部リンク