Pythonプロジェクト
Pythonプロジェクトジェネレータは、モダンなPythonライブラリやアプリケーションを作成するために使用できます。これらのプロジェクトはベストプラクティスに基づいて構成され、UVによる依存関係管理、単一のロックファイルと仮想環境をUVワークスペース内で管理し、テスト実行にはpytest、静的解析にはRuffを使用します。
Pythonプロジェクトの生成
Section titled “Pythonプロジェクトの生成”新しいPythonプロジェクトを2つの方法で生成できます:
- インストール Nx Console VSCode Plugin まだインストールしていない場合
- VSCodeでNxコンソールを開く
- クリック
Generate (UI)"Common Nx Commands"セクションで - 検索
@aws/nx-plugin - py#project - 必須パラメータを入力
- クリック
Generate
pnpm nx g @aws/nx-plugin:py#projectyarn nx g @aws/nx-plugin:py#projectnpx nx g @aws/nx-plugin:py#projectbunx nx g @aws/nx-plugin:py#project| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
| name 必須 | string | - | The name of the Python project |
| directory | string | packages | Parent directory where the project is placed. |
| projectType 必須 | string | application | Project type |
| moduleName | string | - | Python module name |
ジェネレータの出力
Section titled “ジェネレータの出力”ジェネレータは<directory>/<name>ディレクトリ内に以下のプロジェクト構造を作成します:
Directory<module-name>
- __init__.py モジュール初期化ファイル
- hello.py Pythonソースファイルの例
Directorytests
- __init__.py モジュール初期化ファイル
- conftest.py テスト設定ファイル
- test_hello.py テストファイルの例
- project.json プロジェクト設定とビルドターゲット
- pyproject.toml UV用パッケージ設定ファイル
- .python-version プロジェクトのPythonバージョン情報
ワークスペースのルートにも以下のファイルが作成/更新されます:
- pyproject.toml UV用ワークスペースレベルのパッケージ設定
- .python-version ワークスペースのPythonバージョン情報
- uv.lock Python依存関係のロックファイル
Pythonソースコードの記述
Section titled “Pythonソースコードの記述”Pythonソースコードは<module-name>ディレクトリに追加します。
他のプロジェクトでライブラリコードをインポートする
Section titled “他のプロジェクトでライブラリコードをインポートする”Pythonプロジェクトに依存関係を追加するにはaddターゲットを使用します。
my_appとmy_libという2つのPythonプロジェクトを作成した場合、完全修飾プロジェクト名はmy_scope.my_appとmy_scope.my_libになり、デフォルトのモジュール名はmy_scope_my_appとmy_scope_my_libになります。
my_appがmy_libに依存するようにするには、次のコマンドを実行します:
pnpm nx run my_scope.my_app:add my_scope.my_libyarn nx run my_scope.my_app:add my_scope.my_libnpx nx run my_scope.my_app:add my_scope.my_libbunx nx run my_scope.my_app:add my_scope.my_libこれでライブラリコードをインポートできます:
from my_scope_my_lib.hello import say_hello上記の例では、my_scope_my_libがライブラリのモジュール名、helloはhello.pyファイルに対応し、say_helloはhello.pyで定義されたメソッドです。
依存関係の管理
Section titled “依存関係の管理”プロジェクトに依存関係を追加するには、Pythonプロジェクトでaddターゲットを実行します:
pnpm nx run my_scope.my_library:add some-pip-packageyarn nx run my_scope.my_library:add some-pip-packagenpx nx run my_scope.my_library:add some-pip-packagebunx nx run my_scope.my_library:add some-pip-packageこれによりプロジェクトのpyproject.tomlファイルに依存関係が追加され、ルートのuv.lockが更新されます。
ランタイムコード
Section titled “ランタイムコード”Pythonプロジェクトをランタイムコード(例: AWS Lambda関数のハンドラ)として使用する場合、ソースコードとすべての依存関係をバンドルする必要があります。project.jsonファイルに以下のようなターゲットを追加することで実現できます:
{ ... "targets": { ... "bundle": { "cache": true, "executor": "nx:run-commands", "outputs": ["{workspaceRoot}/dist/packages/my_library/bundle"], "options": { "commands": [ "uv export --frozen --no-dev --no-editable --project packages/my_library --package my_scope.my_library -o dist/packages/my_library/bundle/requirements.txt", "uv pip install -n --no-deps --no-installer-metadata --no-compile-bytecode --python-platform x86_64-manylinux2014 --python `uv python pin` --target dist/packages/my_library/bundle -r dist/packages/my_library/bundle/requirements.txt" ], "parallel": false }, "dependsOn": ["compile"] }, },}Pythonプロジェクトにはbuildターゲットが設定されています(project.jsonで定義)。次のコマンドで実行できます:
pnpm nx run <project-name>:buildyarn nx run <project-name>:buildnpx nx run <project-name>:buildbunx nx run <project-name>:build<project-name>はプロジェクトの完全修飾名です。
buildターゲットはプロジェクトのコンパイル、リント、テストを実行します。
ビルド出力はワークスペースのルートdistフォルダ内に生成されます(例: dist/packages/<my-library>/build)。
pytestがプロジェクトのテスト用に設定されています。
テストの記述
Section titled “テストの記述”テストはプロジェクト内のtestディレクトリに、test_で始まるPythonファイルとして作成します:
Directorymy_library
- hello.py
Directorytest
- test_hello.py hello.pyのテスト
テストメソッドはtest_で始まり、アサーションで期待値を検証します:
from my_library.hello import say_hello
def test_say_hello(): assert say_hello("Darth Vader") == "Hello, Darth Vader!"テストの書き方の詳細はpytestドキュメントを参照してください。
テストの実行
Section titled “テストの実行”テストはbuildターゲットの一部として実行されますが、testターゲットで個別に実行することも可能です:
pnpm nx run <project-name>:testyarn nx run <project-name>:testnpx nx run <project-name>:testbunx nx run <project-name>:test-kフラグを使用して特定のテストファイルやメソッドを指定できます:
pnpm nx run <project-name>:test -k 'test_say_hello'yarn nx run <project-name>:test -k 'test_say_hello'npx nx run <project-name>:test -k 'test_say_hello'bunx nx run <project-name>:test -k 'test_say_hello'PythonプロジェクトではRuffをリントツールとして使用しています。
リントの実行
Section titled “リントの実行”プロジェクトのリントチェックを行うにはlintターゲットを実行します:
pnpm nx run <project-name>:lintyarn nx run <project-name>:lintnpx nx run <project-name>:lintbunx nx run <project-name>:lintリント問題の修正
Section titled “リント問題の修正”ほとんどのリントやフォーマットの問題は自動修正可能です。--configuration=fix引数を付けて実行することで修正できます:
pnpm nx run <project-name>:lint --configuration=fixyarn nx run <project-name>:lint --configuration=fixnpx nx run <project-name>:lint --configuration=fixbunx nx run <project-name>:lint --configuration=fixワークスペース内の全パッケージのリント問題を修正するには:
pnpm nx run-many --target lint --all --configuration=fixyarn nx run-many --target lint --all --configuration=fixnpx nx run-many --target lint --all --configuration=fixbunx nx run-many --target lint --all --configuration=fix