Aller au contenu

Projets Python

Le générateur de projet Python permet de créer une bibliothèque ou application Python moderne configurée avec 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

Générer un projet Python

Vous pouvez générer un nouveau projet Python de deux manières :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - py#project
  5. Remplissez les paramètres requis
    • Cliquez sur Generate

    Options

    Paramètre Type Par défaut Description
    name Requis string - The name of the Python project
    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 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 source Python

    Ajoutez votre code source Python dans le répertoire <module-name>.

    Importer votre code bibliothèque dans d’autres projets

    Étant donné que des espaces de travail UV sont configurés pour vous, vous pouvez référencer votre projet Python depuis n’importe quel autre projet Python dans votre espace de travail :

    packages/my_other_project/my_other_project/main.py
    from "my_library.hello" import say_hello

    Ci-dessus, my_library est le nom du module, hello correspond 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, vous pouvez exécuter la cible add dans votre projet Python, par exemple :

    Terminal window
    pnpm 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 uv.lock racine.

    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 à votre fichier project.json :

    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 :

    Terminal window
    pnpm nx run <project-name>:build

    <project-name> est le nom qualifié complet de votre projet.

    La cible build compilera, linttera et testera votre projet.

    Le résultat de la construction se trouve dans le dossier dist racine de votre espace de travail, dans un répertoire pour 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 :

    test/test_hello.py
    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 dans le cadre de la cible build de votre projet, mais vous pouvez aussi les exécuter séparément via la cible test :

    Terminal window
    pnpm nx run <project-name>:test

    Vous pouvez exécuter un test individuel ou une suite de tests en utilisant le flag -k, en spécifiant le nom du fichier de test ou de la méthode :

    Terminal window
    pnpm nx run <project-name>:test -k 'test_say_hello'

    Linting

    Les projets Python utilisent Ruff pour le linting.

    Exécuter le linter

    Pour invoquer le linter et vérifier votre projet, exécutez la cible lint :

    Terminal window
    pnpm nx run <project-name>:lint

    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 :

    Terminal window
    pnpm nx run <project-name>:lint --configuration=fix

    De même, si vous souhaitez corriger tous les problèmes de lint dans tous les packages de votre espace de travail, exécutez :

    Terminal window
    pnpm nx run-many --target lint --all --configuration=fix