pipenv, solution moderne pour remplacer pip et virtualenv 17
dimanche 8 octobre 2017 à 17:44Kenneth Reitz, l’auteur de requests, tente régulièrement de nous refaire le coup du projet star. Ca n’a malheureusement pas très bien marché, et beaucoup de ses projets comme maya, records, crayon, tablib ou awesome n’ont pas vraiment connu de succès.
Entre alors pipenv, que j’ai testé il y a presque un an, et qui au départ montrait un beau potentiel, mais n’était pas encore très utilisable. J’ai fait quelques suggestions d’amélioration, comme permettre de choisir précisément la version de Python, et je me suis fait envoyé bouler. J’ai donc laissé l’auteur s’enterrer dans sa recherche de gloire passée.
Le hasard de reddit m’a remis pipenv
sous le nez, et j’ai donc redonné sa chance au produit. Surprise, l’outil est maintenant très stable (plus de 2000 commits !) et mes propositions avaient même été intégrées.
Après ces 3 paragraphes vous vous demandez sans doute quand est-ce que je vais rentrer dans le vif du sujet, donc:
pipenv
reprend les idées de pip, virtualenv, pew et même quelques trucs de npm, yarn, cargo, et essaye d’appliquer tout ça à Python. L’article suppose que vous savez ce que sont ces mots barbares, donc suivez les liens si ce n’est pas le cas.
pipenv
permet donc d’installer des packages Python, d’isoler cette installation et de la rendre reproductible. Mais sans effort.
En effet, contrairement à la concurrence:
- La gestion du virtualenv est automatique et transparente
- Les paquets installés sont sauvegardés dans des fichiers de config, encore une fois de manière automatique et transparente.
- Les fichiers de config distinguent les dépendances de prod et de dev, et incluent les versions des sous-dépendances.
Installer pipenv
Contrairement à pip et virtualenv, pipenv
n’est pas fourni avec une installation standard de Python, bien que l’outil soit maintenant recommandé par la doc officielle. Il va donc falloir l’installer. Or pipenv
se base sur une version récente de pip
, donc il faut d’abord être sûr d’avoir pip à jour.
Du coup:
# mise à jour de pip, mais juste au niveau utilisateur pour # pas casser le system python -m pip install pip --upgrade --user |
Puis:
# installation de pipenv python -m pip install pipenv --user |
A moins d’être sous une Debian like type Ubuntu (qui demande un apt install de python-pip avant), tout le monde a pip installé avec une version moderne de Python.
Voilà, vous devriez avoir la commande pipenv
disponible, ou pour ceux qui ont un système mal configuré, python -m pipenv
.
Usage
Dans le dossier de votre projet:
pipenv install nom_du_package |
C’est tout.
Si un virtualenv n’existe pas il sera créé. Sinon il sera utilisé. Les fichiers de configs sont gérés automatiquement, il n’y a rien à faire.
Si vous voulez lancer une commande dans le virtualenv:
pipenv run commande |
Exemple:
pipenv run python |
Va lancer le Python de votre virtualenv.
Si vous voulez que toutes les commandes soient dans le virtualenv:
pipenv shell |
Et vous êtes dans un nouveau shell, dans le virtualenv. Ainsi:
python |
Lancera celui de votre virtualenv.
On sort du shell avec Ctrl + D.
Vous pouvez arrêtez de lire l’article ici, c’est l’essentiel de ce qu’il y a à savoir.
Astuces
Si vous lancez pour la première fois dans un dossier pipenv
avec:
pipenv --python x.x |
Le virtualenv sera créé avec la version de Python x.x, pourvu qu’elle existe sur votre système. Setter la variable d’env PIPENV_DEFAULT_PYTHON_VERSION
a le même effet.
Installer un package avec pipenv install --dev
le marque comme dépendance de développement uniquement, et permet une installation séparée.
Vous pouvez aussi obtenir quelques infos utiles comme:
pipenv --venv
: ou est le dossier du virtualenvpipenv graph
: un graph de toutes vos dépendancespipenv --py
: chemin vers le Python en cours.
Enfin pipenv
utilise pew
, donc la magie de pew
reste dispo, y compris la gestion de projets :)
Usage avancé
Si vous créez un fichier .env
dans le dossier de votre projet tels que:
FOO=1 BAR=wololo
pipenv
exécutera toutes ses commandes (y compris shell
), avec FOO
et BAR
comme variables d’environnement.
La commande:
pipenv lock |
Va créer un lock file. Ce fichier contient toutes les dépendances, et recursivement, les dépendances des dépendances, installées, avec leurs versions. On peut réutiliser ce fichier en prod pour installer une exacte copie de son setup local avec pipenv install
. Sans ce fichier, pipenv install
se comportera comme pip install
.
Il y a plein d’autres trucs mais on va en rester là.