Posted on April 12, 2019· Updated on July 3, 2022

PoetryとVSCodeによるPythonプロジェクト入門 パート1 - Pythonチートシート

#python #intermediate #vscode #packaging
Image for PoetryとVSCodeによるPythonプロジェクト入門 パート1 - Pythonチートシート

仮想環境は、単一のプロジェクトでのみ使用する可能性のあるライブラリでベースの環境を埋め尽くすのを避けるために設計された、分離された Python インストールです。また、異なるプロジェクトで同じパッケージの複数のバージョンを管理することもできます。例えば、一方では Django 4.1 が、もう一方では 1.9 が必要になるかもしれません。

Python Poetry

Poetry は、依存関係のインストール、Python パッケージのビルドとパッケージングを処理するためのツールです。これらすべてを行うには、新しい標準化された pyproject.toml ファイルが 1 つあれば十分です。言い換えれば、Poetry は pyproject.toml を使用して setup.pyrequirements.txtsetup.cfgMANIFEST.in、および新しく追加された Pipfile を置き換えます。

この記事シリーズでは、Poetry を使用して依存関係を管理し、簡単なプロジェクトをビルドし、単一のコマンドで PyPI に公開します。

この最初のパートでは、次のことを行います。

  • 新しいプロジェクトを開始する。
  • 仮想環境を作成する。
  • 依存関係を管理する。
2 番目の記事では、次のことを行います。
  • 仮想環境を VSCode に追加する。
  • 開発依存関係を統合する。
    • Flake8
    • Black
    • Pytest

そして最後に、3 番目の記事で次のことを行います。

  • サンプルライブラリを作成する。
  • Poetry でプロジェクトをビルドする。
  • PyPI に公開する。

Poetry のインストール

最も簡単な方法は、pip を使用することです。

pip install poetry

しかし、システム上の他のものから Poetry を分離するために、その依存関係をベンダー化する Poetry 独自のインストーラーを使用します。これが Poetry をインストールする推奨される方法です。

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

このようにすると、後で poetry self update コマンドを使用して Poetry を最新の安定版に更新できるようになります。

新しいプロジェクトの開始

poetry new [project_name] コマンドを使用して、新しい Python プロジェクトを開始できます。私はそれを how-long と呼び、関数の実行時間を測定するための簡単なライブラリにします。

poetry new how-long

注:既存のプロジェクトの場合は、poetry init コマンドを使用して対話的に pyproject.toml を作成できます。

how-long ディレクトリが作成され、その中に基本的なプロジェクト構造があります。

how-long
├── README.rst
├── how_long
│   └── __init__.py
├── pyproject.toml
└── tests
    ├── __init__.py
    └── test_how_long.py

プロジェクト構造の管理に不可欠な、ファイルおよびディレクトリパスの処理に関する包括的なガイドについては、ファイルとディレクトリのパス ページを参照してください。

注:プロジェクトを公開できるようにするには、利用可能な名前が必要です。PyPI の検索を使用してください。

pyproject.toml ファイル

pyproject.toml ファイルがプロジェクトの詳細と依存関係を管理します。

[tool.poetry]
name = "how-long"
version = "0.1.0"
description = "A simple decorator to measure a function execution time."
authors = ["wilfredinni <carlos.w.montecinos@gmail.com>"]

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

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

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

[tool.poetry]

詳細情報。ライセンスREADMEを追加するのは良い考えかもしれません。

[tool.poetry]
...
license = "MIT"
readme = "README.rst"

[tool.poetry.dependencies]

最初に来るのは Python のバージョンです。基本的に、このプロジェクトは Python 3.7 以降と互換性があります。さらに、今後、本番環境で使用されるすべてのパッケージはここにリストされます。

[tool.poetry.dev-dependencies]

これらのパッケージは開発専用であり、プロジェクトをビルドおよび公開するときには含まれません。デフォルトでは、Poetry は Pytest を含めるため、後でプロジェクトのテストに使用します。

仮想環境の作成

仮想環境を作成し、Pytest をインストールするには、poetry install コマンドを使用します。

poetry install

poetry-install-command

完了すると、新しいファイル poetry.lock が作成されます。

Poetry がインストールの完了後、ダウンロードしたすべてのパッケージとその正確なバージョンを poetry.lock ファイルに書き込み、プロジェクトをそれらの特定のバージョンに固定します。プロジェクトに取り組むすべての人が依存関係の同じバージョンに固定されるように、poetry.lock ファイルをプロジェクトリポジトリにコミットする必要があります。

依存関係の管理

依存関係を追加または削除する 1 つの方法は、pyproject.toml を直接編集してから poetry install を実行して変更を適用することです。代わりに、手動での変更を避けるために add および remove コマンドを使用します。

依存関係の追加

プロジェクトに pendulumcoo の 2 つのパッケージを追加しましょう。

poetry add pendulum coo

poetry-add-command

pyproject.tomlpoetry.lock を開いて、それらがどのように更新されたかを確認してください。

開発依存関係の追加

これらの依存関係は開発中のみ利用可能であり、Poetry はプロジェクトのビルドと公開時には含めません。

Pytest はすでにインストールされていますが、リンティングのために flake8 と静的型付けのために mypy も使用します。

poetry add -D flake8 mypy

今考えてみると、フォーマッタを追加するのを忘れていました。black を使用することにします。

poetry add -D black
[ValueError]
Could not find a matching version of package black

add [-D|--dev] [--git GIT] [--path PATH] [-E|--extras EXTRAS] [--optional] [--python PYTHON] [--platform PLATFORM] [--allow-prereleases] [--dry-run] [--] <name> (<name>)...

このエラーは、black がプレリリース状態にあるため、Poetry が安定版を見つけられないために発生します。しかし、どうしても必要なため、--allow-prereleases フラグを使用してインストールします。

poetry add -D black --allow-prereleases

poetry-add-dev-command

依存関係の削除

わかりました、気が変わりました。このプロジェクトでは coomypy も使用しません。まず、プロジェクトの通常の依存関係である coo を削除することから始めます。

poetry remove coo

次に、開発依存関係である mypy を削除します。

poetry remove -D mypy

結論

この最初のパートでは、新しいプロジェクトを開始し、仮想環境を作成し、次のコマンドを使用して依存関係を追加および削除しました。

コマンド説明
poetry new [package-name]新しい Python プロジェクトを開始します。
poetry initpyproject.toml ファイルを対話的に作成します。
poetry installpyproject.toml ファイル内のパッケージをインストールします。
poetry add [package-name]パッケージを仮想環境に追加します。
poetry add -D [package-name]開発パッケージを仮想環境に追加します。
poetry remove [package-name]パッケージを仮想環境から削除します。
poetry remove -D [package-name]開発パッケージを仮想環境から削除します。
poetry self:updatePoetry を最新の安定版に更新します。
2 番目の記事では、より多くの Poetry コマンドを確認し、仮想環境を VSCode に追加し、インストールした開発パッケージを使用してエディタ内でコードのリンティング (Flake8)、フォーマット (Black)、およびテスト (Pytest) を行います。最後に、3 番目の記事で、サンプルライブラリを作成し、PyPI に公開します。

ご質問やご提案はありますか?コメントを残してください。