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#project
yarn nx g @aws/nx-plugin:py#project
npx nx g @aws/nx-plugin:py#project
bunx 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_lib
yarn nx run my_scope.my_app:add my_scope.my_lib
npx nx run my_scope.my_app:add my_scope.my_lib
bunx 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 “依存関係の管理”プロジェクトに依存関係を追加するには、add
ターゲットを実行します:
pnpm nx run my_scope.my_library:add some-pip-package
yarn nx run my_scope.my_library:add some-pip-package
npx nx run my_scope.my_library:add some-pip-package
bunx 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-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>:build
yarn nx run <project-name>:build
npx nx run <project-name>:build
bunx 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>:test
yarn nx run <project-name>:test
npx nx run <project-name>:test
bunx 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>:lint
yarn nx run <project-name>:lint
npx nx run <project-name>:lint
bunx nx run <project-name>:lint
リンター問題の修正
Section titled “リンター問題の修正”ほとんどのリンターやフォーマッターの問題は自動修正可能です。--configuration=fix
引数を付けて実行します:
pnpm nx run <project-name>:lint --configuration=fix
yarn nx run <project-name>:lint --configuration=fix
npx nx run <project-name>:lint --configuration=fix
bunx nx run <project-name>:lint --configuration=fix
ワークスペース内の全パッケージのリンター問題を修正するには:
pnpm nx run-many --target lint --all --configuration=fix
yarn nx run-many --target lint --all --configuration=fix
npx nx run-many --target lint --all --configuration=fix
bunx nx run-many --target lint --all --configuration=fix