Skip to article frontmatterSkip to article content

Définition

On appelle ici environnement de développement un espace restreint, facile à reproduire et à effacer qui prend en compte l’ensemble des dépendances de notre projet Python. Il permet de travailler de manière isolée. Il permet également à d’autres contributeurs de travailler dans une même configuration.

Les outils

Il en existe un certain nombre et c’est en les utilisant que l’on peut se faire sa propre opinion. J’utilise pour ma part mamba et pixi car je ne développe pas qu’en Python et conda-forge est bien pratique lorsqu’on a des dépendances à des librairies écrites dans d’autres langages. Mais, pour des développements que Python, d’autres choix peuvent être plus pertinents.

Voici une liste d’outils que vous pouvez utiliser pour créer vos environnements de développement

  • venv

    Cet outil est disponible depuis la version 3.3 de Python et est installé sur votre système en même temps que Python.

  • pipenv

    Cet outil offre plus de flexibilité que venv.

  • mamba

    Cet outil permet de gérer plusieurs environnements en s’appuyant sur les packages se trouvant sur PyPi et sur les différentes channels de conda.

  • poetry

    Cet outil ressemble à ce que l’on peut trouver lorsqu’on utilise nodejs à savoir que la configuration de votre environnement va évoluer en fonction de ce que vous installez et ce que vous désinstallez. Tous ces changements sont décrits dans un fichier permettant de reproduire un environnement à l’identique.

  • pixi

    Nouveau venu, cet outil permet là encore de faire des environnements à la nodejs où la configuration est incluse dans le répertoire de développement en utilisant les packages se trouvant sur conda. Il n’est donc pas dédié uniquement aux développements Python et est bien plus généraliste.

Définir ses dépendances via requirements.txt ou environment.yml

Si nous avons vu précédemment que certains outils pouvaient écrire leur propre fichier indiquant les dépendances d’un environnement, nous allons voir ici deux formats un peu plus universels

  • requirements.txt est un fichier permettant de décrire les dépendances et peut être utilisé avec l’ensemble des outils cités.
  • environment.yml est utilisé par les outils s’appuyant sur des packages conda.

Example de fichier requirements.txt

Sans versions définies

numpy
matplotlib
jupyterlab

Avec des versions bien précises

numpy>1.20
matplotlib==3.7.1
jupyterlab>4.0,<4.1

Example de fichier environment.yml

Sans versions définies

name: my-env
channels:
    - conda-forge
dependencies:
    - numpy
    - matplotlib
    - jupyterlab

Avec des versions bien précises

name: my-env
channels:
    - conda-forge
dependencies:
    - numpy>1.20
    - matplotlib=3.7.1
    - jupyterlab>4.0,<4.1

Installer son environnement

Avec le fichier requirements.txt

  • En utilisant pipenv
pipenv install -r requirements.txt
  • En utilisant mamba

    Il faut d’abord créer un environnement avec la version Python que vous souhaitez

    mamba create -n my-env python

    puis l’activer

    mamba activate my-env

    Puis installer les dépendances

    mamba install --file requirements.txt

Avec le fichier environment.yml

Cet étape se fait uniquement avec mamba.

mamba env create --file environment.yml

Il ne reste plus qu’à activer l’environment

mamba activate my-env

Utilisation de pixi

Il est également possible de construire son environnement via pixi de manière incrémentale en ajoutant au fur et à mesure les dépendances de son projet et en créant un ensemble de tâches nous facilitant le travail.

La première chose à faire est d’installer pixi en suivant ce lien: https://prefix.dev/docs/pixi/overview#installation

Placez vous dans le répertoire practical_session, puis initialiser l’environnement de développement en utilisant la commande suivante

pixi init

Vous avez à présent un fichier pixi.toml qui initialise votre environnement de développement. Il contient normalement au moins les éléments suivants

[project]
name = "project name"
channels = ["conda-forge"]
platforms = ["osx-arm64"]

[tasks]

[dependencies]

La section projet vous permet de spécifier où aller chercher les paquets (ici conda-forge) et pour quel type de plateforme (ici osx-arm64).

Vous pouvez facilement ajouter vos dépendances à l’aide de la commande pixi add.

pixi add numpy

Si vous retournez dans le fichier pixi.toml vous devriez voir l’ajout de numpy dans les dépendances avec une version fixée. Un fichier pixi.lock a également été créé. Ce fichier contient l’arbre des dépendances permettant de réinstaller à l’identique votre environnement de développement.

Nous souhaiterions à présent que cet environnement soit installable sur différentes plateformes (linux, macos, windows). Nous allons ici ajouter la plateforme linux-64 directement dans le fichier pixi.toml. Avec la commande

pixi update

nous mettons à jour pixi.lock.

Pour travailler dans l’environnement, vous disposez de deux commandes pixi runpour exécuter une ligne de commande ou pixi shell qui peut être vu comme l’équivalent de l’activation de l’environnement pour mamba.

Nous ne rentrerons pas plus dans les détails de l’utilisation de pixi car ce n’est pas l’objet de cette formation. Vous verrez dans la suite de cette formation d’autres commandes qui pourront vous être utiles.