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

仮想環境は、単一のプロジェクトでのみ使用する可能性のあるライブラリでベースの環境を埋め尽くすのを避けるために設計された、分離された Python インストールです。また、異なるプロジェクトで同じパッケージの複数のバージョンを管理することもできます。例えば、一方では Django 4.1 が、もう一方では 1.9 が必要になるかもしれません。
Python Poetry
Poetry は、依存関係のインストール、Python パッケージのビルドとパッケージングを処理するためのツールです。これらすべてを行うには、新しい標準化された pyproject.toml ファイルが 1 つあれば十分です。言い換えれば、Poetry は pyproject.toml を使用して setup.py、requirements.txt、setup.cfg、MANIFEST.in、および新しく追加された Pipfile を置き換えます。
この記事シリーズでは、Poetry を使用して依存関係を管理し、簡単なプロジェクトをビルドし、単一のコマンドで PyPI に公開します。
この最初のパートでは、次のことを行います。
- 新しいプロジェクトを開始する。
- 仮想環境を作成する。
- 依存関係を管理する。
- 仮想環境を 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.lock が作成されます。
Poetry がインストールの完了後、ダウンロードしたすべてのパッケージとその正確なバージョンを poetry.lock ファイルに書き込み、プロジェクトをそれらの特定のバージョンに固定します。プロジェクトに取り組むすべての人が依存関係の同じバージョンに固定されるように、poetry.lock ファイルをプロジェクトリポジトリにコミットする必要があります。
依存関係の管理
依存関係を追加または削除する 1 つの方法は、pyproject.toml を直接編集してから poetry install を実行して変更を適用することです。代わりに、手動での変更を避けるために add および remove コマンドを使用します。
依存関係の追加
プロジェクトに pendulum と coo の 2 つのパッケージを追加しましょう。
poetry add pendulum coo

pyproject.toml と poetry.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

依存関係の削除
わかりました、気が変わりました。このプロジェクトでは coo も mypy も使用しません。まず、プロジェクトの通常の依存関係である coo を削除することから始めます。
poetry remove coo
次に、開発依存関係である mypy を削除します。
poetry remove -D mypy
結論
この最初のパートでは、新しいプロジェクトを開始し、仮想環境を作成し、次のコマンドを使用して依存関係を追加および削除しました。
| コマンド | 説明 |
|---|---|
poetry new [package-name] | 新しい Python プロジェクトを開始します。 |
poetry init | pyproject.toml ファイルを対話的に作成します。 |
poetry install | pyproject.toml ファイル内のパッケージをインストールします。 |
poetry add [package-name] | パッケージを仮想環境に追加します。 |
poetry add -D [package-name] | 開発パッケージを仮想環境に追加します。 |
poetry remove [package-name] | パッケージを仮想環境から削除します。 |
poetry remove -D [package-name] | 開発パッケージを仮想環境から削除します。 |
poetry self:update | Poetry を最新の安定版に更新します。 |
ご質問やご提案はありますか?コメントを残してください。