Projets Python
Le générateur de projets Python permet de créer une bibliothèque ou application Python moderne configurée selon les meilleures pratiques, gérée 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
Section intitulée « Utilisation »Générer un projet Python
Section intitulée « 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#projectyarn nx g @aws/nx-plugin:py#projectnpx nx g @aws/nx-plugin:py#projectbunx nx g @aws/nx-plugin:py#projectVous pouvez également effectuer une simulation pour voir quels fichiers seraient modifiés
pnpm nx g @aws/nx-plugin:py#project --dry-runyarn nx g @aws/nx-plugin:py#project --dry-runnpx nx g @aws/nx-plugin:py#project --dry-runbunx nx g @aws/nx-plugin:py#project --dry-run| Paramètre | Type | Par défaut | Description |
|---|---|---|---|
| name Requis | string | - | Le nom du projet Python |
| directory | string | packages | Répertoire parent où le projet est placé. |
| subDirectory | string | - | Le sous-répertoire dans lequel le projet est placé. Par défaut, il s'agit du nom du projet. |
| projectType Requis | string | application | Si le projet est une application ou une bibliothèque |
| moduleName | string | - | Nom du module Python |
Résultat du générateur
Section intitulée « 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
Répertoiretests
- __init__.py Initialisation du module
- conftest.py Configuration des tests
- test_noop.py Test placeholder
- 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 peut-être également les fichiers suivants 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
Section intitulée « Écrire du code Python »Ajoutez votre code source Python dans le répertoire <module-name>.
Importer votre code dans d’autres projets
Section intitulée « Importer votre code dans d’autres projets »Utilisez la cible add pour ajouter une dépendance à un projet Python.
Supposons que nous ayons créé deux projets Python, my_app et my_lib. Ceux-ci auront des noms de projet qualifiés complets my_scope.my_app et my_scope.my_lib, et auront par défaut des noms de module my_scope_my_app et my_scope_my_lib.
Pour que my_app dépende de my_lib, exécutez la commande suivante :
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_libVous pouvez ensuite importer votre code :
from my_scope_my_lib.my_module import my_functionCi-dessus, my_scope_my_lib est le nom du module pour la bibliothèque, my_module correspond à un fichier source Python my_module.py, et my_function est une méthode définie dans ce fichier.
Dépendances
Section intitulée « 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-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-packageCela ajoutera la dépendance au fichier pyproject.toml de votre projet et mettra à jour le uv.lock racine.
Code d’exécution
Section intitulée « Code d’exécution »Lorsque vous utilisez votre projet Python comme code d’exécution (par exemple comme gestionnaire pour 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 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"] }, },}Votre projet Python est configuré avec une cible build (définie dans project.json), que vous pouvez exécuter via :
pnpm nx build <project-name>yarn nx build <project-name>npx nx build <project-name>bunx nx build <project-name>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.
Pour builder tous les projets de votre espace de travail, exécutez :
pnpm nx run-many --target buildyarn nx run-many --target buildnpx nx run-many --target buildbunx nx run-many --target buildOu utilisez la commande raccourcie :
pnpm buildyarn buildnpm run buildbun buildpytest est configuré pour tester votre projet.
Écrire des tests
Section intitulée « É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
- my_module.py
Répertoiretests
- test_my_module.py Tests pour my_module.py
Les tests sont des méthodes commençant par test_ et utilisant des assertions pour vérifier les attentes, par exemple :
from my_library.my_module 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
Section intitulée « Exécuter les tests »Les tests s’exécutent dans le cadre de la cible build de votre projet, mais vous pouvez aussi les exécuter séparément avec la cible test :
pnpm nx test <project-name>yarn nx test <project-name>npx nx test <project-name>bunx nx test <project-name>Vous pouvez exécuter un test individuel ou une suite de tests avec le flag -k, en spécifiant le nom du fichier de test ou de la méthode :
pnpm nx test <project-name> -k 'test_say_hello'yarn nx test <project-name> -k 'test_say_hello'npx nx test <project-name> -k 'test_say_hello'bunx nx test <project-name> -k 'test_say_hello'Les projets Python utilisent Ruff pour le linting.
Exécuter le linter
Section intitulée « Exécuter le linter »Pour invoquer le linter et vérifier votre projet, exécutez la cible lint :
pnpm nx lint <project-name>yarn nx lint <project-name>npx nx lint <project-name>bunx nx lint <project-name>Corriger les problèmes de lint
Section intitulée « Corriger les problèmes de lint »La majorité des problèmes de lint ou de formatage peuvent être corrigés automatiquement. Vous pouvez demander à Ruff de corriger les problèmes de lint en utilisant l’argument --configuration=fix :
pnpm nx lint <project-name> --configuration=fixyarn nx lint <project-name> --configuration=fixnpx nx lint <project-name> --configuration=fixbunx nx lint <project-name> --configuration=fixDe même, pour corriger tous les problèmes de lint dans tous les packages de votre espace de travail, exécutez :
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=fixIgnorer les problèmes de lint
Section intitulée « Ignorer les problèmes de lint »Pour éviter que les problèmes de linting ne vous ralentissent pendant le développement (en particulier si vous avez des problèmes non corrigeables automatiquement dans votre projet), vous pouvez exécuter un build avec la configuration skip-lint :
pnpm nx run-many --target build --configuration=skip-lintyarn nx run-many --target build --configuration=skip-lintnpx nx run-many --target build --configuration=skip-lintbunx nx run-many --target build --configuration=skip-lintCela exécutera toujours Ruff dans le cadre du build, mais la cible lint sera toujours considérée comme réussie.