Gérer des projets Python avec Poetry

Poetry est un outil de packaging et de gestion de dépendances pour Python. Il permet de démarrer rapidement un projet Python, de gérer les dépendances et de créer des packages. Voici un bref aperçu.

Gérer des projets Python avec Poetry
Photo par Émile Perron / Unsplash

Installer Poetry

Versions disponibles et exigences

Pour les versions de Poetry disponibles, consultez Versions de Poetry.

De plus, avant d’exécuter les commandes d’installation, jetez un œil à la Configuration requise (version python...).

Utilisez Pyenv pour installer plusieurs versions Python indépendantes du système

Si la version requise de Python pour l'installation de Poetry n'est pas disponible dans les référentiels de packages de votre système, vous pouvez utiliser pyenv pour installer cette version de Python en parallèle de celle de votre système actuel. Voici un guide rapide pour configurer et utiliser Pyenv.

Installer les packages requis pour Pyenv

Utilisez ceci: Paquets requis pour Pyenv.

Installer Pyenv
# Run installation script
curl https://pyenv.run | bash

# Load pyenv automatically by appending
# the following to ~/.bash_profile if it exists, 
# otherwise ~/.profile (for login shells) and 
# ~/.bashrc (for interactive shells)

export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

# Restart your shell for the changes to take effect.
exec $SHELL
Mettre à jour Pyenv et gérer les versions Python
# To update pyenv, its plugins including the list of available python versions
pyenv update

# List available python versions that can be installed
pyenv install --list

# Install a specific python version
pyenv install <python_version>

# Uninstall a specific python version
pyenv uninstall <python_version>

# Set a specific pyenv installed python version as the default for all the system
pyenv global <python_version>

# Example + verification
# Get the default python version for the whole system
$ pyenv global
system # 'system' means that the python version we are using
       # is the one installed by default on the system

# Set python 3.12.2 for the whole system
$ pyenv global 3.12.2

# Verify
$ pyenv global
3.12.2

# Rollback to the system default python version
$ pyenv global system

Installation de Poetry

Versions de Poetry

# Latest version
curl -sSL https://install.python-poetry.org | python3 -

# Specific version
curl -sSL https://install.python-poetry.org | POETRY_VERSION=1.2.0 python3 -

# Add Poetry executable to $PATH
echo export PATH="$HOME/.local/bin:$PATH" >> ~/.bashrc
bash

# Verify
poetry --version

Initialiser un projet Python avec Poetry

Un fichier de configuration « pyproject.toml » contient des informations sur nos packages Python, ainsi que les versions et dépendances Python requises. Pour créer un fichier « pyproject.toml » pour notre projet, nous utilisons :

poetry init

Voici un exemple de contenu « pyproject.toml » généré :

[tool.poetry]
name = "mypackage"
version = "0.1.0"
description = "illustrate pyproject.toml config generated with poetry"
authors = ["gmkziz"]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.8"
requests = "^2.30.0"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

Pour créer un dossier de projet Python avec la disposition « src » (par défaut), nous pouvons utiliser la commande « poetry new ». L'option « --flat » peut également être utilisée pour une disposition « flat ». Détails Ici.

Pour en savoir plus sur les structures de projets Python « src » et « flat », consultez Organisation de projets Python : src Vs flat.

Gérer les dépendances des packages Python avec Poetry

La commande « poetry install » installe toutes les dépendances des packages à partir d'un fichier « poetry.lock ». Si le fichier « poetry.lock » n'est pas présent lors de l'exécution de « poetry install », il est créé après l'installation de toutes les dépendances spécifiées dans le fichier « pyproject.toml ».

Le fichier « poetry.lock » contient toutes les dépendances installées et les contraintes de version. Pour créer uniquement le fichier « poetry.lock », utilisez :

# Only create the poetry.lock file
poetry lock

Les commandes « poetry add » ou « poetry remove » permettent d'ajouter ou de supprimer des dépendances. Une fois les dépendances installées ou supprimées, les fichiers « pyproject.toml » et « poetry.lock » sont mis à jour.

Par défaut, les dépendances sont implicitement ajoutées ou supprimées du groupe « racine » (le groupe principal). Pour plus de détails sur les différentes formes permettant de spécifier les paquets de dépendances, consultez la fin de « poetry add --help » ou la documentation en ligne correspondante : Documentation de la commande 'poetry add'.

# Add click package as dependency for the root group
poetry add click

# Add pre-commit package as development dependency (dev group)
poetry add pre-commit --group=dev

# Add pytest package as test dependency (test group)
poetry add pytest --group=test

Voici comment la commande précédente a impacté le fichier « pyproject.toml » :

(...)
[tool.poetry.dependencies]
python = "^3.8"
requests = "^2.30.0"
click = "^8.1.3" # added

# added
[tool.poetry.group.dev.dependencies]
pre-commit = "^3.3.2"

# added
[tool.poetry.group.test.dependencies]
pytest = "^7.3.1"
(...)

Pour supprimer les dépendances, nous utilisons ce qui suit :

# If the group is not specified, will be removed from all groups
poetry remove pytest

# Specify a specific group for the removal
# Package will be removed only from that group
poetry remove pre-commit --group=dev

Exécuter du code Python à partir de virtualenvs Poetry

La commande « poetry run » peut être utilisée pour exécuter nos codes Python dans l'environnement virtuel poetry contenant toutes les dépendances des packages installés :

poetry run script.py [args]

La commande « poetry shell » peut être utilisée pour créer un shell dans l'environnement virtuel contenant toutes les dépendances de paquets installées :

poetry shell
pip freeze
python ...
(...)

Mettre à jour Poetry

Pour mettre à jour la version de Poetry vers la dernière disponible, exécutez simplement :

poetry self update

Conteneuriser les programmes Python gérés avec Poetry

Voici un exemple de contenu « Dockerfile » qui peut être utilisé pour conteneuriser des programmes Python gérés avec Poetry :

FROM python:3.11
ENV POETRY_VERSION=1.4.2
RUN pip install "poetry==$POETRY_VERSION"
WORKDIR /app
COPY poetry.lock pyproject.toml /app/
RUN POETRY_VIRTUALENVS_CREATE=false poetry install --without=dev --without=tests --no-interaction --no-ansi
COPY src /app
ENTRYPOINT ["python", "app.py"]