Le python est l’un des langages les plus conviviaux et les plus puissants qui soient. Il est facile à maîtriser pour les débutants, mais possède une force de frappe considérable et est largement utilisé dans divers domaines tels que la programmation scientifique, la programmation d'applications Web et DevOps. Mais l’un des points faibles de Python est son support pour le packaging d’applications complexes et leurs dépendances..
Au fil des ans, de nombreux efforts ont été déployés pour améliorer la situation. En août 2017, j'ai rédigé un tutoriel sur l'état de la situation en matière de packaging Python: comment écrire, mettre en package et distribuer une bibliothèque en Python.
Cela fait seulement quatre mois et il y a un nouveau joueur en ville. Pipenv est maintenant l'outil officiellement recommandé par PyPA (Python Packaging Authority) pour l'emballage. Dans ce didacticiel, vous apprendrez pourquoi Pipenv améliore considérablement l'état des processus d'emballage et de développement pour les développeurs Python et comment l'utiliser efficacement..
Pipenv a pour objectif d'améliorer le flux de travail de développement des développeurs Python en matière de gestion des dépendances et des environnements virtuels. C'est une autre excellente bibliothèque de l'industriel Kenneth Reitz, qui est surtout connu pour le paquet de requêtes (HTTP pour les humains), mais qui a écrit quelques autres excellents paquets..
Oui! Pipenv prend une page des pratiques modernes de gestion des paquets et les importe dans le monde Python.
Vous pouvez installer Pipenv avec pip installer pipenv
. Vous obtiendrez une belle sortie avec emojis:
$ pip install pipenv ✨🍰✨
Vous devrez le faire juste une fois. Si vous n'avez pas installé pip, vous pouvez utiliser cette commande bootstrap: $ curl
https://github.com/pypa/pipenv/blob/master/get-pipenv.py
| python
Pipenv peut créer un environnement virtuel vide pour vous. Voici une démo rapide:
~ / git> mkdir testpipenv ~ / git> cd testpipenv ~ / git / testpipenv> pipenv --three Résultat: Création d'une virtualenv pour ce projet… Utilisation de / usr / local / bin / python3 pour créer virtualenv… ⠋ Exécution de virtualenv avec un interprète / usr / local / bin / python3 Utilisation du préfixe de base '/usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6' Nouvel exécutable python dans /Users/gigi.sayfan/.local/share/ virtualenvs / testpipenv-0GShD6dy / bin / python3.6 Création également d'un fichier exécutable dans /Users/gigi.sayfan/.local/share/virtualenvs/testpipenv-0GShD6dy/bin/python Installation de setuptools, pip, wheel… done. Emplacement Virtualenv: /Users/gigi.sayfan/.local/share/virtualenvs/testpipenv-0GShD6dy Création d'un fichier de passe pour ce projet…
Cela créera un Pipfile vide sans dépendances. Mais comme vous voudrez probablement installer des paquetages pour votre projet, vous pouvez simplement utiliser pipenv pour installer un paquet et cela créera automatiquement l'environnement virtuel. Par exemple:
~ / git / testpipenv> demandes d'installation pipenv Sortie: installation de demandes… Collecte de demandes Utilisation de demandes en cache-2.18.4-py2.py3-none-any.whl Collecte d'idna<2.7,>= 2.5 (à partir de demandes) Utilisation de la commande idna-2.6-py2.py3-none-any.whl en cache<3.1.0,>= 3.0.2 (à partir de demandes) Utilisation de chardet-3.0.4-py2.py3-none-any.whl mis en cache Collecting certifi> = 2017.4.17 (à partir de demandes) Utilisation de certifi-mis en cache-2017.11.5-py2.py3-none- any.whl Collecte d'urllib3<1.23,>= 1.21.1 (à partir de requêtes) Utilisation de la mise en cache urllib3-1.22-py2.py3-none-any.whl Installation des packages collectés: idna, chardet, certifi, urllib3, demandes Certifi-2017.11.5 chardet-3.0.4 idna- 2.6 request-2.18.4 urllib3-1.22 Ajout de requêtes aux [packages] de Pipfile… PS: vous avez un excellent goût! 🍰 ✨ Verrouillage des dépendances [dev-packages]… Verrouillage des dépendances [packages]… Mis à jour Pipfile.lock (7b8df8)!
Le niveau de détail est excellent et il utilise de jolies couleurs. Voici le Pipfile résultant:
[[source]] url = "https://pypi.python.org/simple" verify_ssl = vrai nom = "pypi" [dev-packages] [packages] request = "*" [nécessite] python_version = "3.6"
Le Pipfile garde la trace des dépendances de haut niveau de votre projet - ici, juste Requêtes = "*"
. Il utilise le format TOML, qui est un choix populaire de nos jours pour les fichiers de configuration (Rust's Cargo, Python PEP-518)..
Le fichier Pipefile.lock, en revanche, est un fichier JSON qui spécifie des métadonnées et les versions exactes (y compris les hachages) de toutes les dépendances récursives (dépendances de niveau supérieur et leurs dépendances). Voici le fichier Pipfile.lock:
"_meta": "hash": "sha256": "33a0ec7c8e3bae6f62dd618f847de92ece20e2bd4efb496927e2524b9c7b8df8", "hôte-environnement-marqueurs": "application_protoc", " : "posix", "platform_machine": "x86_64", "platform_python_implementation": "CPython", "platform_release": "16.7.0", "platform_system": "Darwin", "platform_version": "Darwin version du noyau 16.7.0 : Mer. 4 oct. 00:17:00 HAP 2017; racine: xnu-3789.71.6 ~ 1 / RELEASE_X86_64 "," python_full_version ":" 3.6.3 "," python_version ":" 3.6 "," sys_platform ":" darwin " , "pipfile-spec": 6, "nécessite": "version_python": "3.6", "sources": ["nom": "pypi", "url": "https: //pypi.python Haut de la page subséquent 2017.11.5 "," chardet ": " hash ": [" sha256: fc323ffcaeaed0e0a02bf4d117757b98 aed530d9ed4531e3e15460124c106691" , "SHA256: 84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"], "version": "== 3.0.4", "IDNA": "hashes": [ "SHA256: 8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4", "SHA256: 2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f"], "version": Signe de bricolage "[Sha256: 06330fd6db6d6fb6b6b6b6b6b6b6b6b6b6bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb]:
Si vous voulez voir un graphique de toutes vos dépendances, tapez: graphique de pipenv
~ / git / testpipenv> demandes de graphe pipenv == 2.18.4 - certifi [requis:> = 2017.4.17, installé: 2017.11.5] - chardet [requis:> = 3.0.2,<3.1.0, installed: 3.0.4] - idna [required: <2.7,>= 2.5, installé: 2.6] - urllib3 [requis:> = 1.21.1,<1.23, installed: 1.22]
Une fois que vous avez installé un package avec Pipenv, celui-ci est accessible dans votre environnement virtuel, tout comme un package standard (le même que si vous l’aviez installé). La seule précaution consiste à utiliser votre interpréteur d'environnement virtuel. Pipenv fournit deux commandes utiles: courir
et coquille
.
Tu utilises pipenv courir python
pour exécuter votre programme, et vous utilisez pipenv shell
pour démarrer un nouveau shell avec votre interpréteur Python d’environnement virtuel. Voici comment utiliser la commande shell pour démarrer une session Python interactive qui utilise le package de demandes installées pour obtenir un devis du jour à partir d’une API REST. L’environnement virtuel est activé et le lancement de Python utilise le bon interprète, où demandes
est disponible.
~ / git / testpipenv> pipenv shell shell d'environnement de reproduction (/ bin / bash). Utilisez 'sortie' pour partir. source /Users/gigi.sayfan/.local/share/virtualenvs/testpipenv-0GShD6dy/bin/activate ~ / git / testpipenv> source /Users/gigi.sayfan/.local/share/virtualenvs/testpipenvs (testpipenv-0GShD6dy) ~ / git / testpipenv> python Python 3.6.3 (par défaut, le 19 novembre 2017, 16:39:12) [GCC 4.2.1 Compatible avec Apple LLVM 9.0.0 (900.0.38)] sur darwin Tapez "aide", "copyright", "crédits" ou "licence" pour plus d'informations. >>> demandes d'importation >>> r = requests.get ('https://quotes.rest/qod') >>> r.ok True >>> r.json () 'success': 'total' : 1, 'contenus': 'quotes': ['quote': 'Restez avec des gens meilleurs que vous.', 'Author': 'Warren Buffett', 'length': Aucun, 'tags' : ['obtenir-meilleur', 'inspirer', 'personnes'], 'catégorie': 'inspirer', 'titre': 'Citation inspirante du jour', 'date': '2018-01-03', ' id ': None],' copyright ':' 2017-19 theysaidso.com ' >>> quote = r.json () [' contenu '] [' quotes '] [0] [' quote ']> >> auteur = r.json () ['contenu'] ['citations'] [0] ['auteur'] >>> print (f 'quote ~~ auteur') Hang Out avec des personnes qui sont Mieux que toi. ~~ Warren Buffett >>>
Si vous souhaitez migrer un projet existant avec un fichier Requirements.txt, Pipenv est là pour vous. Simplement: pipenv install -r
.
Toutes vos dépendances seront importées dans le Pipfile. Pour installer réellement les dépendances et générer le fichier Pipfile.lock, vous devez pipenv installer
. Une fois que vous avez vérifié que tout fonctionne comme prévu, vous pouvez supprimer votre fichier exigences.txt..
Si votre exigence.txt existe dans le même répertoire que vous avez créé l'environnement virtuel, Pipenv générera automatiquement le fichier Pipfile. Mais sachez que si votre fichier Requirements.txt contient des versions épinglées, elles le seront également dans le fichier Pipfile. Dans le monde Pipenv, l'épinglage devrait se produire dans le fichier Pipfile.lock. Pipenv donnera un rappel amical. Voir ci-dessous:
~ / git / testpipenv> cat exigences.txt == 2.18.4 ~ / git / testpipenv> pipenv --three Création d’un virtualenv pour ce projet… Utilisation de / usr / local / bin / python3 pour créer virtualenv… Exécution de virtualenv avec interpréteur / usr / local / bin / python3 Utilisation du préfixe de base '/usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6' Nouvel exécutable python dans /Users/gigi.sayfan/.local/ share / virtualenvs / testpipenv-0GShD6dy / bin / python3.6 Création également d'un fichier exécutable dans /Users/gigi.sayfan/.local/share/virtualenvs/testpipenv-0GShD6dy/bin/python Installation de setuptools, pip, wheel… done. Emplacement Virtualenv: /Users/gigi.sayfan/.local/share/virtualenvs/testpipenv-0GShD6dy Requirements.txt trouvé au lieu de Pipfile! Conversion en cours… Avertissement: Votre Pipfile contient maintenant des versions épinglées, si votre besoin.txt le faisait. Nous vous recommandons de mettre à jour votre Pipfile pour spécifier la version "*" à la place..
Voici la version épinglée dans le Pipfile qu'il est recommandé de remplacer par "*":
[packages] request = "== 2.18.4"
Installons maintenant les dépendances:
~ / git / testpipenv> pipenv install Pipfile.lock introuvable, création… Verrouillage des dépendances [dev-packages]… Verrouillage des dépendances [packages]… Mis à jour Pipfile.lock (0b0daf)! Installation de dépendances à partir de Pipfile.lock (0b0daf)… ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 5/5 - 00:00 : 01 Pour activer le fichier virtualenv de ce projet, exécutez la commande suivante: $ pipenv shell ~ / git / testpipenv>
Vous pouvez dire à Pipenv d'installer un chemin éditable. Ceci est utile lorsque vous dépendez des packages que vous développez et que vous voulez dépendre de votre package source sans les installer réellement chaque fois que vous apportez une modification. En particulier, il est utile pour le répertoire en cours lorsque vous y travaillez activement. Pour ce faire, utilisez le -e
et --dev
drapeaux:
> pipenv installez '-e.' --dev
Vous devez avoir un fichier setup.py approprié.
Vous avez déjà vu beaucoup de ce que Pipenv peut faire pour vous. Approfondissons quelques commandes et options supplémentaires.
le pipenv installer
La commande supporte plusieurs options:
--dev
: Installez les packages de développement et par défaut à partir de Pipfile.lock.--système
: Utilisez la commande système pip plutôt que celle de votre virtualenv.--ignorer-pipfile
: Ignorer le fichier pipfile et installer à partir du fichier pipfile.lock.--skip-lock
: Ignorez le fichier Pipfile.lock et installez-le à partir du fichier Pipfile. De plus, n’écrivez pas un Pipfile.lock reflétant les modifications apportées au Pipfile.. En fonction de votre flux de travail et de vos préférences, vous souhaiterez peut-être utiliser une ou plusieurs de ces options à des moments différents..
Pour désinstaller une dépendance, tapez: désinstaller pipenv
. Par exemple:
~ / git / testpipenv> demandes de désinstallation de pipenv Désinstallation de demandes… Désinstallation de demandes-2.18.4: Demandes désinstallées avec succès-2.18.4 Suppression de demandes de Pipfile… Verrouillage de dépendances [dev-packages]… Verrouillage de dépendances [packages]… Pipfile mis à jour. serrure (625834)!
Notez que je n’étais pas obligé de spécifier "demandes == 2.8.14" lors de la désinstallation, même si celle-ci était bloquée dans le Pipfile..
Si vous souhaitez générer un instantané de vos dépendances actuelles (par exemple avant une publication), utilisez la commande lock. C'est la clé des constructions déterministes et reproductibles: pipenv lock --pre
.
Pipenv est génial, mais vous pouvez nettoyer de temps en temps certains de vos environnements virtuels. C'est aussi simple que pipenv --rm
.
Pipfile.lock tire parti des nouvelles améliorations importantes apportées à pip en matière de sécurité. Par défaut, le fichier Pipfile.lock sera généré avec les hachages sha256 de chaque package téléchargé. Cela permettra à pip de garantir que vous installez ce que vous avez l'intention de faire sur un réseau compromis ou que vous téléchargez des dépendances à partir d'un point de terminaison PyPI non approuvé..
En outre, Pipenv fournit le vérifier
commande, qui vérifie la conformité avec PEP 508 - Spécification de dépendance pour les packages logiciels Python, ainsi que la sécurité des packages:
~ / git / testpipenv> vérification de pipenv. Vérification des exigences PEP 508… réussi! Vérification de la sécurité des paquets installés… Tout va bien!
Enfin, Pipenv place l'emballage Python à la pointe du développement logiciel moderne. Il s’inspire d’autres systèmes de gestion des dépendances efficaces tels que Rust's Cargo et Javascript's Yarn..
Il associe environnements virtuels et gestion de paquets et offre une expérience supérieure avec des messages d’information magnifiques et colorés et des meilleures pratiques implicites! Je vous recommande vivement de commencer à utiliser Pipenv pour gérer vos projets Python.
De plus, n'hésitez pas à voir ce que nous avons disponible à la vente et à étudier dans le marché Envato, et n'hésitez pas à poser des questions et à fournir vos précieux commentaires en utilisant le flux ci-dessous.