Projets Python
Le générateur de projets Python permet de créer des bibliothèques ou applications Python modernes configurées avec les bonnes pratiques, gérées avec UV, un fichier de verrouillage unique et un environnement virtuel dans un espace de travail UV, pytest pour exécuter les tests, et Ruff pour l’analyse statique.
Utilisation
Générer un projet Python
Vous pouvez générer un nouveau projet Python de deux manières :
- Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
- Ouvrez la console Nx dans VSCode
- Cliquez sur
Generate (UI)
dans la section "Common Nx Commands" - Recherchez
@aws/nx-plugin - py#project
- Remplissez les paramètres requis
- Cliquez sur
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
Vous pouvez également effectuer une simulation pour voir quels fichiers seraient modifiés
pnpm nx g @aws/nx-plugin:py#project --dry-run
yarn nx g @aws/nx-plugin:py#project --dry-run
npx nx g @aws/nx-plugin:py#project --dry-run
bunx nx g @aws/nx-plugin:py#project --dry-run
Options
Paramètre | Type | Par défaut | Description |
---|---|---|---|
name Requis | string | - | Project name. |
directory | string | packages | Parent directory where the project is placed. |
projectType Requis | string | application | Project type |
moduleName | string | - | Python module name |
Résultat du générateur
Le générateur créera la structure de projet suivante dans le répertoire <directory>/<name>
:
Répertoire<module-name>
- __init__.py Initialisation du module
- hello.py Exemple de fichier source Python
Répertoiretests
- __init__.py Initialisation du module
- conftest.py Configuration des tests
- test_hello.py Exemple de tests
- project.json Configuration du projet et cibles de build
- pyproject.toml Fichier de configuration d’empaquetage utilisé par UV
- .python-version Contient la version Python du projet
Vous remarquerez également ces fichiers créés/mis à jour à la racine de votre espace de travail :
- pyproject.toml Configuration d’empaquetage au niveau de l’espace de travail pour UV
- .python-version Contient la version Python de l’espace de travail
- uv.lock Fichier de verrouillage des dépendances Python
Écrire du code Python
Ajoutez votre code source Python dans le répertoire <module-name>
.
Importer votre bibliothèque dans d’autres projets
Grâce à la configuration des espaces de travail UV, vous pouvez référencer votre projet Python depuis n’importe quel autre projet Python dans votre espace de travail :
from "my_library.hello" import say_hello
Ici, my_library
correspond au nom du module, hello
au fichier source Python hello.py
, et say_hello
est une méthode définie dans hello.py
.
Dépendances
Pour ajouter des dépendances à votre projet, exécutez la cible add
dans votre projet Python, par exemple :
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
Cela ajoutera la dépendance au fichier pyproject.toml
de votre projet et mettra à jour le fichier uv.lock
racine.
Code d’exécution
Lorsque vous utilisez votre projet Python comme code d’exécution (par exemple comme gestionnaire d’une fonction AWS Lambda), vous devrez créer un bundle du code source et de toutes ses dépendances. Vous pouvez y parvenir en ajoutant une cible comme celle-ci dans votre fichier 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 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"] }, },}
Construction
Votre projet Python est configuré avec une cible build
(définie dans project.json
) que vous pouvez exécuter via :
pnpm nx run <project-name>:build
yarn nx run <project-name>:build
npx nx run <project-name>:build
bunx nx run <project-name>:build
Où <project-name>
est le nom qualifié complet de votre projet.
La cible build
compilera, linttera et testera votre projet.
Le résultat du build se trouve dans le dossier dist
racine de votre espace de travail, dans un répertoire spécifique à votre package et à la cible, par exemple dist/packages/<my-library>/build
.
Tests
pytest est configuré pour tester votre projet.
Écrire des tests
Les tests doivent être écrits dans le répertoire test
de votre projet, dans des fichiers Python préfixés par test_
, par exemple :
Répertoiremy_library
- hello.py
Répertoiretest
- test_hello.py Tests pour hello.py
Les tests sont des méthodes commençant par test_
qui utilisent des assertions pour vérifier les attentes, par exemple :
from my_library.hello import say_hello
def test_say_hello(): assert say_hello("Darth Vader") == "Hello, Darth Vader!"
Pour plus de détails sur l’écriture de tests, consultez la documentation pytest.
Exécuter les tests
Les tests s’exécutent automatiquement avec la cible build
, mais vous pouvez aussi les lancer séparément via la cible 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
Vous pouvez exécuter un test individuel ou un groupe de tests avec le flag -k
, en spécifiant le nom du fichier ou de la méthode de test :
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'
Vérification du code
Les projets Python utilisent Ruff pour la vérification du code.
Exécuter le linter
Pour invoquer le linter et vérifier votre projet, exécutez la cible 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
Corriger les problèmes
La plupart des problèmes de linting ou de formatage peuvent être corrigés automatiquement. Activez la correction automatique avec l’argument --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
De même, pour corriger tous les problèmes dans tous les packages de votre espace de travail :
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