06 Pip, virtualenv et pipenv
Pip
pip est un gestionnaire de paquets utilisé pour installer et gérer des paquets écrits en Python. De nombreux paquets peuvent être trouvés sur le dépôt Python Package Index (PyPI).
pip est un acronyme récursif qui correspond à la fois à « Pip Installs Packages » ou à « Pip Installs Python »
CLI
Un des avantages majeurs de pip est la facilité de son interface en ligne de commande, qui rend l'installation de paquets applicatifs Python aussi simple que de taper une commande :
pip install <nom-du-paquet>
Virtualenv
virtualenv est un outil pour créer des environnements Python virtuels isolés.
Le problème de base à résoudre est celui des dépendances, des versions, et indirectement des autorisations.
Imaginez que vous ayez une application nécessitant la version 1 de LibFoo, mais qu'une autre application nécessite la version 2. Comment utiliser ces deux applications? Si vous installez tout dans /usr/lib/python2.7/site-packages
(ou quel que soit l'emplacement standard de votre plate-forme), il est facile de vous retrouver dans une situation où vous mettez à jour involontairement une application qui ne devrait pas l'être.
Le problème de base à résoudre est celui des dépendances et des versions, et indirectement des autorisations. Imaginez que vous ayez une application nécessitant la version 1 de LibFoo, mais qu'une autre application nécessite la version 2. Comment utiliser ces deux applications? Si vous installez tout dans /usr/lib/python2.7/site-packages (ou quel que soit l'emplacement standard de votre plate-forme), il est facile de vous retrouver dans une situation où vous mettez à jour involontairement une application qui ne devrait pas l'être.
Ou plus généralement, si vous voulez installer une application et la laisser? Si une application fonctionne, toute modification de ses bibliothèques ou de leurs versions peut perturber l'application.
De plus, que se passe-t-il si vous ne pouvez pas installer de packages dans le répertoire global site-packages? Par exemple, sur un hôte partagé ou encore les machines de l'iut.
Dans tous ces cas, virtualenv peut vous aider. Il crée un environnement qui possède ses propres répertoires d’installation, qui ne partage pas de bibliothèques avec d’autres environnements virtualenv (et n’a pas non plus accès aux bibliothèques installées globalement).
Pipenv, solution moderne pour remplacer pip et virtualenv
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.
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
Bien que l’outil soit maintenant recommandé par la doc officielle. Il va 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 installé et à jour.
Pour installer pipenv un simple:
pip install pipenv
Sur les machines de l'iut c'est déjà fait pour vous !
Utilisation
Dans le dossier de votre projet:
pipenv --python 3
Nous allons créer un environement virtuel basé sur python3. 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 python
Ceci lancera le python de notre virtualenv
Si vous voulez que toutes les commandes soient dans le virtualenv:
pipenv shell
Découverte de requests
Nous allons tenter de développer une (mini/nano) première application (un peu) utile en python.
Notre programme appellera une API qui va récupérer le résultat de la requête en JSON (JavaScript Object Notation) pour l’afficher dans notre console.
Les API sur Internet
Les API sont un moyen d’accéder aux données d’un site sans avoir l’autorisation d’accéder directement à la base de données. Il y a beaucoup de portails sécurisés permettant à vos applications web de manipuler les données renvoyées par ces sites.
L’exemple parfait est Twitter. Elle permet de lire la timeline d’une personne en particulier, de rechercher des statuts à partir d’un mot clé, de modifier les paramètres de votre compte, etc.
Pourquoi choisir JSON ?
Vous pouvez utiliser les API avec de nombreux langages et retourner les données de plusieurs façons. L’une d’elles est le JSON (JavaScript Object Notation). C’est un format de données léger, facile à lire et à écrire et compatible avec pas mal de langages de développement.
Sa structure est composée d’objets et de tableaux. Sa flexibilité fait de JSON le parfait candidat pour retourner des données.
Utilisation de requests
D'abord il convient d'installer requests:
pipenv install requests
Puis dans un fichier .py
nous pouvons appeller l'api suivante https://allosaurus.delahayeyourself.info/api/books:
import requests # Import du module requests
response = requests.get('https://allosaurus.delahayeyourself.info/api/books')
response.status_code # 200
response.text # Corps de la réponse en texte brut
response.json() # Corps de la réponse transcripté en objets
- Modifiez votre fichier pour afficher chaque élément (titre, auteur, etc.) retourné par l'API,
- Essayez de récupérer l'élément JSON à l'url suivante: /api/books/a-game-of-thrones comme précédemment,
- Comment corriger ce problème ?
Conclusion
Vous venez de découvrir le gestionnaire de dépendances python, les environements virtuels python qui sera bien utile pour la suite de nos aventures !
Vous avez également découvert les API REST et le format de données JSON ! Félicitations !