Comment gérer des projets Python avec Pipenv

L'écosystème de packages de Python vous permet de tirer parti du travail de millions d'autres développeurs avec une simple pip installcommande. Les environnements virtuels de Python vous permettent d'isoler les projets et leurs packages les uns pour les autres.

Mais jongler séparément entre les environnements et les packages peut s'avérer compliqué. Doublement si vos projets ont des exigences spécifiques en matière de package et que vous souhaitez vous concentrer sur le développement plutôt que sur la maintenance. Ce dont nous avons besoin, c'est d'un moyen de gérer ensemble les environnements et les packages. 

Pipenv regroupe la gestion des environnements virtuels Python et des packages Python dans un seul outil. Pipenv garantit que chaque projet utilise la version correcte de chaque package dont il a besoin et que chacun de ces packages a également les dépendances correctes.

De plus, Pipenv génère une liste des dépendances de votre projet qui peuvent voyager avec lui, permettant à d'autres utilisateurs ou développeurs de configurer le même projet de la même manière. Les autres utilisateurs devront également installer Pipenv pour configurer correctement un projet géré par Pipenv, mais heureusement, installer et utiliser Pipenv est un jeu d'enfant. 

Comment fonctionne Pipenv

En règle générale, lorsque vous créez un projet Python et utilisez un environnement virtuel pour ses packages, vous êtes chargé de créer vous-même l'environnement virtuel (à l'aide de la commande  py -m venv), d'y installer des dépendances et de suivre les dépendances manuellement.

Pipenv fournit un moyen de faire tout cela de manière semi-automatique. L'environnement virtuel de votre projet est créé et géré pour vous lorsque vous installez des packages via l'interface de ligne de commande de Pipenv. Les dépendances sont suivies et verrouillées, et vous pouvez gérer les dépendances de développement et d'exécution séparément. Vous pouvez également migrer à partir de requirements.txtfichiers old-school existants, vous n'avez donc pas besoin de déchirer votre projet et de le recommencer à zéro pour bien utiliser Pipenv.

Notez que contrairement aux autres outils de gestion de projet Python (comme Poetry), Pipenv ne gère pas le «scaffolding» de votre projet. Autrement dit, Pipenv ne crée pas la structure interne du répertoire du projet avec des tests simulés, des talons de documentation, etc., mais se concentre principalement sur la gestion des packages et de l'environnement. Cela fait de Pipenv un bon choix si vous voulez juste un outil se concentrant sur les environnements virtuels et les packages, et non sur une solution tout-en-un.

Démarrez avec Pipenv

Pipenv installe de la même manière que la plupart tout autre package Python: pip install --user pipenv. L' --useroption est recommandée pour éviter que Pipenv n'entre en conflit avec d'autres packages à l'échelle du système. Vous devez également ajouter le chemin d'accès au répertoire binaire de la base utilisateur au chemin système, afin que les commandes Pipenv soient acheminées vers le bon endroit.

Si vous envisagez de faire de Pipenv une partie cohérente de votre flux de travail, c'est également une bonne idée de garder votre installation Python sous-jacente aussi minimale que possible. Ce conseil s'applique à la plupart des installations Python qui utilisent des environnements virtuels.

Configurer un nouveau projet avec Pipenv

Pour commencer un tout nouveau projet avec Pipenv, créez simplement un répertoire et remplissez-le avec les fichiers que vous créez normalement pour un projet. Si vous avez tendance à structurer un projet au fur et à mesure, vous pouvez commencer avec un répertoire vide.

L'installation de packages pour un projet n'est pas sensiblement différente avec Pipenv qu'avec Pip; en fait, la syntaxe est sensiblement la même. Ouvrez une console dans le répertoire de votre projet et tapez pipenv install pour installer un package pour le projet. Pour spécifier que le package est destiné au développement , utilisez l' -dindicateur. Vous pouvez utiliser la pip syntaxe pour désigner une version spécifique d'un package (par exemple, black==13.0b1).

Lorsque vous installez un package avec Pipenv, deux choses se produisent. Tout d'abord, Pipenv vérifiera si un environnement virtuel a déjà été créé pour ce répertoire de projet. Si oui, Pipenv installera le package dans l'environnement virtuel existant. Si non, Pipenv créera un environnement virtuel utilisant la même édition de Python que celle utilisée pour exécuter Pipenv. Notez que l'environnement virtuel n'est pas créé dans le répertoire du projet lui-même; il est créé dans un répertoire géré par Pipenv dans votre profil utilisateur.

Deuxièmement, Pipenv installera les packages demandés dans l'environnement virtuel. Une fois l'installation terminée, Pipenv rendra compte de tout ce qu'il a fait, y compris un chemin vers l'environnement virtuel s'il devait en créer un.

Vous n'avez généralement pas besoin de connaître le chemin d'accès à l'environnement virtuel créé par Pipenv. Pour activer l'environnement, accédez simplement au répertoire de votre projet et utilisez  pipenv shellpour lancer une nouvelle session shell ou utilisez  pipenv run pour exécuter une commande directement. Par exemple, utilisez  pipenv run mypypour exécuter la version de l'outil de ligne de commande de mypy(en supposant que l' mypyoutil a été installé dans l'environnement virtuel), ou pipenv run python -m pour exécuter un module Python disponible dans l'environnement virtuel.

Pipenv et lockfiles

Jetez un œil dans le répertoire après avoir installé les packages avec Pipenv, et vous verrez deux fichiers, Pipfileet Pipfile.lock. Les deux sont générés automatiquement par Pipenv et ne doivent pas être modifiés directement, car ils décrivent l'état des packages dans le projet.

Pipfileest le plus simple des deux. Il répertorie simplement les packages nécessaires pour le projet, d'où ils sont installés (la valeur par défaut est PyPI) et quelle version de Python est nécessaire pour tout exécuter. Pipfile.lockest plus complexe. Il répertorie chaque package avec les détails de la version et les hachages SHA-256 générés à partir du package. Les hachages sont utilisés pour s'assurer que les packages installés correspondent exactement à ce qui est spécifié - pas seulement le numéro de version, mais également le contenu obtenu.

Lorsque vous travaillez sur un projet qui utilise Pipenv pour la gestion des packages, vous souhaiterez ajouter les fichiers Pipfileet Pipfile.lockau référentiel de contrôle de version du projet. Toutes les modifications apportées aux packages de votre projet modifieront à leur tour ces fichiers, ces modifications doivent donc être suivies et versionnées.

Utiliser un projet Pipenv

Si vous téléchargez un référentiel source pour un projet qui utilise Pipenv pour la gestion des packages, tout ce que vous avez à faire est de décompresser le contenu du référentiel dans un répertoire et de l'exécuter pipenv install(aucun nom de package n'est nécessaire). Pipenv lira les fichiers Pipfileet Pipfile.lockdu projet, créera l'environnement virtuel et installera toutes les dépendances si nécessaire.

Enfin, si vous souhaitez utiliser Pipenv pour gérer un projet qui utilise actuellement un requirements.txtfichier, accédez simplement au répertoire du projet et exécutez pipenv install. Pipenv détecte le requirements.txt(ou vous pouvez utiliser l' -rindicateur pour le pointer) et migrer toutes les exigences vers un fichier  Pipfile.