PoetryとVSCodeを使ったPythonプロジェクト 第2部 - Pythonチートシート

pyproject.tomlファイルとは何か、それとの連携方法、Poetryを使用して新しいプロジェクトを開始する方法、仮想環境の作成方法、依存関係の追加と削除について学習しました。これらはすべて次のコマンドで行いました。| Command | Description |
|---|---|
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] | 開発パッケージを仮想環境から削除します。 |
この 2 番目のパートでは、次のことを行います。
- 仮想環境をVSCodeに追加します。
- 依存関係を更新します。
- 開発依存関係をエディタと統合します。
- Flake8
- Black
- Pytest
そして、3 番目の記事では、サンプルライブラリを作成し、Poetryでプロジェクトをビルドし、PyPIに公開します。
始める前に、VSCodeがインストールされており、Python拡張機能が追加されており、このシリーズの最初の記事をフォローし、理解していることを確認してください。
VSCode での Poetry の設定
最初のパートから数日経過しているため、依存関係の新しいバージョンを確認すると良いでしょう。ターミナルを開き、プロジェクトディレクトリに移動して、poetry updateコマンドを入力します。

現時点では、新しいバージョンは利用できません。
venvコマンドで仮想環境を作成すると、VSCodeは自動的にそれをそのプロジェクトのデフォルトの Python 環境として設定します。Poetryを使用する場合、初回はプロジェクトフォルダー内でターミナルに次のように入力する必要があります。
poetry shell
code .
最初のコマンドであるpoetry shellは仮想環境内に私たちを起動し、code .は現在のフォルダーをVSCode内で開きます。

左側のパネルを使用してhow-longフォルダー(またはプロジェクト名が付いたフォルダー)を開き、__init__.pyの隣にhow-long.pyファイルを作成します。左下隅に、現在の Python 環境が表示されます。

それをクリックすると、利用可能な環境のリストが表示されます。プロジェクト名が含まれているものを選択します。

次に、開発依存関係であるFlake8、Black、およびPytestを Visual Studio Code に統合しましょう。
Flake8
Flake8は、プロジェクトにリンティング機能を提供します。つまり、構文エラーやスタイルエラーを警告し、VSCode のおかげで、入力しながらそれらを知ることができます。
デフォルトでは、Python 拡張機能にはPylintが有効になっていますが、これは強力ですが設定が複雑です。Flake8に切り替えるには、任意の Python ファイルを変更して保存すると、右下隅にポップアップメッセージが表示されます。

Select Linterをクリックし、リストからFlake8を選択します。これで、VSCodeは、深刻度に応じて緑または赤で、常に何が間違っているかのわかりやすい説明とともに、構文とスタイルの問題を教えてくれます。

2 つの問題があるようです。ファイル末尾の空行が不足している(スタイル)ことと、*Hello, World!*文字列の引用符の追加を忘れたこと(構文)です。これらを修正すると、すべての警告が消えるのを確認できます。
Black
Blackはコードフォーマッタであり、コードを確認し、PEP 8スタイルガイドに準拠するように自動的にフォーマットするツールです。これは、Flake8がスタイルのエラーをリンティングするために使用するのと同じPEPです。
shift + cmd/ctrl + pを押してコマンドパレットを開き、Format Documentと入力して Enter キーを押します。新しいポップアップメッセージが表示されます。

Use Blackを選択します。次に、この不体裁なコードを Python ファイルにコピーします。
for i in range(5): # this comment has too many spaces
print(i) # this line has 6 space indentation.
なんて醜い s***…コードでしょう。もう一度フォーマットを試して、Blackがすべてを修正する方法を確認してください!
もう 1 つできることは、保存するたびにBlackがコードを自動的にフォーマットするように VSCode を設定することです。cmd/ctrl + ,を押して設定を開きます。Workspace Settingsになっていることを確認し、Format On Saveを検索してチェックボックスをオンにします。

最後に、Blackはデフォルトで 1 行あたり 88 文字ですが、Flake8が許可する 80 文字とは異なるため、競合を避けるために、.vscodeフォルダーを開き、settings.jsonファイルの末尾に次を追加します。
{
...
"python.linting.flake8Args": [
"--max-line-length=88"
],
}

Pytest
プログラミングに真剣に取り組んでいるなら、プロジェクトのテスト方法を学ぶことは非常に重要です。これは、出荷後に壊滅的なバグが出現する可能性を減らすことで、自信を持ってプログラムを作成し提供できるようにする、信じられないほど役立つスキルです。
Pytestは、テストの記述に非常に人気があり、ユーザーフレンドリーなフレームワークです。私たちはすでにインストールしています。そのため、VSCodeとの統合も行います。
testsフォルダーを開き、test_how_long.pyファイルを選択します。Poetryはすでに最初のテストを提供してくれています。
# test_how_long.py
from how_long import __version__
def test_version():
assert __version__ == '0.1.0'
このテストでは、how_longフォルダー内にある__init__.pyファイルから__version__変数をインポートし、現在のバージョンが0.1.0であることをアサートします。統合ターミナルをTerminal > New Terminalで開き、次のように入力します。
pytest
出力は次のようになります。

OK、すべて順調です。shift + cmd/ctrl + pでコマンドパレットを開きます。
- unitと入力し、Python: Configure Unit Testsを選択します。
- pytestを選択します。
- テストを保存したディレクトリ(この場合はtests)を選択します。
3 つのことが起こりました。
ステータスバーに新しいボタンRun Testsが表示されます。これは、ターミナルでpytestと入力するのと同じです。それを押して、Run All Unit Testsを選択します。完了すると、合格したテストの数と不合格だったテストの数が通知されます。

左側のバーに新しいアイコンが表示されます。それをクリックすると、すべてのテストが表示されるパネルが表示されます。ここで、それぞれを個別に実行できます。

テストファイル内で、すべてのテスト関数の前に新しいオプションが表示されます。問題がなければチェックアイコンが、そうでなければxが表示されます。これにより、特定のテストを実行することもできます。

結論
これまでに、次のことを行いました。
- 新しいプロジェクトを開始し、仮想環境を作成し、依存関係を追加、削除、更新しました。
- 仮想環境をVSCode に追加し、コードをリンティングするためにFlake8を構成し、フォーマッタとしてBlackを選択し、テストを視覚的に実行するためにPytestを組み込みました。
最後に、3 番目にして最後の記事では、次のことを行います。
- サンプルライブラリを作成します。
- Poetryでプロジェクトをビルドします。
- PyPIに公開します。