Imaginez la complexité de concevoir une application complète en un seul et unique fichier Python. Bien que cela soit techniquement faisable, une telle approche s’oppose aux principes de base du développement de logiciels efficaces, maintenables et réutilisables. C’est pourquoi les packages et les modules sont des éléments cruciaux pour la création et le déploiement d’applications.
Qu’est-ce qu’un package ?
En Python, un package sert à regrouper de manière structurée des modules et des ressources qui partagent une logique commune. Il s’agit en fait d’un répertoire qui contient plusieurs modules Python, des sous-packages et d’autres fichiers associés.
Les packages établissent une hiérarchie, permettant une organisation du code de votre projet selon différents niveaux d’abstraction.
Distinction entre packages et modules
Bien que les packages et les modules soient utilisés pour structurer le code, il existe une différence essentielle entre les deux :
- Module : Un module est un fichier renfermant du code Python. Il définit des fonctions, des classes, des variables et divers autres objets, que vous pouvez importer et utiliser dans votre propre code.
- Package : Un package est un ensemble constitué d’un ou plusieurs modules, et peut aussi inclure des sous-packages.
Comment créer un package en Python
Voici les étapes à suivre pour créer un package :
Étape 1 : Créer un répertoire de projet
Débutez par la création d’un répertoire qui accueillera votre projet.
study_bud/
Étape 2 : Créer un répertoire de package
À l’intérieur de votre répertoire de projet, créez un nouveau répertoire qui servira de répertoire pour votre package. Choisissez un nom qui reflète clairement le rôle ou la fonctionnalité de votre package. Ce répertoire contiendra les modules et les sous-packages associés.
study_bud/
math_tool/
Étape 3 : Définir le fichier __init__.py du package
Dans le répertoire de votre package, créez un fichier nommé __init__.py. La présence de ce fichier est ce qui transforme un répertoire en package Python.
Si vous devez exécuter du code d’initialisation à chaque utilisation du package, placez-le dans le fichier __init__.py ; sinon, ce fichier peut rester vide.
study_bud/
math_tool/
__init__.py
Étape 4 : Ajouter des modules au package
Dans le répertoire du package, ajoutez les modules Python (.py) qui contiendront les fonctions, les classes ou les variables.
Ces modules renferment le code qui donne vie à votre package. Vous pouvez créer autant de modules que nécessaire dans le répertoire du package.
study_bud/
math_tool/
__init__.py
operations.py
statistics.py
Étape 5 : Ajouter des sous-packages au package
Si votre package doit être structuré en hiérarchie ou regrouper des fonctionnalités distinctes, vous pouvez créer des sous-packages au sein du répertoire du package principal.
Un sous-package est simplement un autre répertoire de package placé dans le répertoire du package parent. Chaque sous-package doit contenir son propre fichier __init__.py. Les sous-packages améliorent l’organisation et la séparation du code.
study_bud/
math_tool/
__init__.py
operations.py
statistics.py
geometry/
__init__.py
shapes.py
calculus/
__init__.py
integrations.py
Avec ces étapes, vous avez mis en place un package « math_tool », auquel vous avez ajouté deux modules (operations.py et statistics.py), ainsi que deux sous-packages, « geometry » et « calculus », chacun doté de ses propres modules.
En suivant ces instructions, vous pouvez organiser facilement les fonctionnalités liées à l’aide d’un package et de sous-packages, ce qui simplifie la gestion et la réutilisation du code.
Comment utiliser un package en Python
Pour utiliser un package, il est nécessaire de l’importer. Les mots-clés import et from permettent d’importer et de solliciter un package dans votre code.
import math_tool
Il est possible d’utiliser la notation pointée pour importer des modules, des sous-packages ou des éléments spécifiques depuis un package. La notation pointée permet de parcourir la structure du répertoire du package. Elle rend vos importations plus claires et plus faciles à gérer.
from math_tool.operations import add, multiply
Dans l’exemple de code ci-dessus, vous êtes passé du répertoire du package (math_tool) au module « operations » en utilisant la notation pointée, et vous avez importé deux fonctions (add et multiply).
Importations absolues et relatives
Les importations absolues consistent à spécifier le chemin complet depuis le package de niveau supérieur (le package racine) jusqu’au module ou sous-package désiré. Cette approche est la plus répandue et recommandée pour l’importation de modules et de packages en Python.
from math_tool.geometry.shapes import parallelogram
À partir de math_tool, on accède au sous-package geometry, puis on recherche le module shapes.py pour y importer la fonction parallelogram.
Les importations relatives, quant à elles, permettent d’effectuer des importations en fonction de l’emplacement du module actuel, en utilisant la notation pointée pour spécifier les importations relatives.
Par exemple, dans le module calculus/integrations.py, il est possible d’utiliser l’importation relative pour importer une fonction du module shapes.py, situé dans le sous-package geometry.
from ..geometry.shapes import rhombus
Le double point (« .. ») indique à Python de :
- Commencer au niveau du répertoire du sous-package (calculus), où se trouve le module (integrations.py).
- Remonter au répertoire du package parent (math_tool) qui contient le sous-package.
- Chercher le sous-package geometry dans le répertoire parent.
- Accéder au module shapes.py et y importer le rhombus.
Ainsi, la notation pointée reflète le nombre de répertoires à parcourir depuis le répertoire du module courant.
Alias d’importation pour plus de facilité
Vous pouvez attribuer un alias à une importation pour simplifier son utilisation dans votre code. Les alias sont utiles lorsque vous avez de longs noms de packages ou de modules.
Pour attribuer un alias, utilisez le mot-clé as.
import math_tool.calculus as cal
Comment distribuer votre package Python
Python fournit les outils et une plateforme pour créer et distribuer votre package. La distribution de votre package favorise le partage de votre code avec d’autres développeurs, encourage la collaboration, facilite l’installation pour les utilisateurs et contribue à la communauté Python au sens large.
Étape 1 : Créer un compte sur PyPI
Python Package Index (PyPI) est le référentiel standard pour les packages Python. Vous pouvez publier vos packages sur PyPI pour que d’autres développeurs puissent facilement les trouver et les installer.
N’oubliez pas votre nom d’utilisateur et votre mot de passe car ils vous seront demandés pour l’authentification lors du chargement de votre package sur PyPI.
Étape 2 : Installer les outils de gestion de packages
Ces outils vous permettent de configurer, construire et déployer facilement un package distribuable à l’aide d’une seule commande.
pip install build wheel twine
Étape 3 : Créer un fichier setup.py
Pour distribuer votre package, créez un fichier setup.py dans le répertoire racine de votre projet. Ce fichier contient les métadonnées de votre package, telles que son nom, sa version, son auteur, sa description, ses dépendances, etc.
Les outils de gestion de packages utiliseront ce fichier setup.py pour configurer et construire votre package.
from setuptools import setup, find_packagessetup(
name="<nom du package>",
version='1.0.0',
author="<Votre Nom>",
description='Une collection de fonctions mathématiques utilitaires',
packages=find_packages(),
install_requires=[
'numpy',
'scipy',
],
)
Étape 4 : Construire le package
Une fois le fichier setup.py prêt, vous pouvez l’utiliser pour construire un package distribuable. Dans votre terminal ou invite de commande, accédez au répertoire contenant le fichier setup.py et lancez la commande suivante :
python setup.py sdist bdist_wheel
Cette commande crée un répertoire dist contenant un package source de distribution (.tar.gz) et un package de distribution wheel (.whl). Vous verrez également un répertoire build et un répertoire .egg-info.
Étape 5 : Télécharger le package sur PyPI
Une fois votre package construit, vous pouvez le télécharger sur PyPI.
Exécutez la commande suivante :
twine upload dist/*
> Uploading distributions to https://upload.pypi.org/legacy/
> Enter your username: **********
> Enter your password: **********
Consultez votre page de gestion de projet sur PyPI pour voir votre package.
Désormais, d’autres développeurs qui trouvent votre package utile peuvent l’installer et l’utiliser localement.
Comment installer un package Python
Les gestionnaires de packages comme pip simplifient l’installation et la gestion de packages Python provenant de diverses sources, y compris le Python Package Index (PyPI). Pour installer un package à l’aide de pip, ouvrez votre terminal ou invite de commande et utilisez la commande suivante :
pip install <nom_du_package>
Pour voir toutes les commandes et options disponibles pour pip, utilisez l’option –help.
Écrire des modules clairs
Les packages englobent des modules et des sous-packages, qui à leur tour contiennent d’autres modules. C’est une bonne pratique de modulariser votre code, en particulier lorsque vous travaillez sur des projets de grande envergure, car cela améliore l’organisation et la lisibilité du code. Il est donc crucial d’écrire des modules avec clarté lorsque vous développez avec Python.