Qu’est-ce que Pip? Un guide pour les nouveaux pythonistes

Qu'est-ce que Pip? Un guide pour les nouveaux pythonistes

Qu'est-ce quepip? pip est le gestionnaire de packages standard pourPython. Il vous permet d'installer et de gérer des packages supplémentaires qui ne font pas partie desPython standard library. Ce tutoriel est une introduction àpip pour les nouveaux pythonistes.

Dans ce didacticiel, vous découvrirez:

  • Installation de packages supplémentaires non inclus dans la distribution Python standard

  • Recherche de packages publiés sur lesPython Package Index (PyPI)

  • Gestion des exigences pour vos scripts et applications

  • Désinstallation des packages et de leurs dépendances

Comme vous le verrez, la communauté Python est très active et a créé des alternatives intéressantes auxpip que vous découvrirez plus tard dans ce didacticiel.

Free Bonus:5 Thoughts On Python Mastery, un cours gratuit pour les développeurs Python qui vous montre la feuille de route et l'état d'esprit dont vous aurez besoin pour faire passer vos compétences Python au niveau supérieur.

Premiers pas avecpip

Alors, qu'est-ce que pip? pip est un gestionnaire de packages pour Python. Cela signifie que c'est un outil qui vous permet d'installer et de gérer des bibliothèques et des dépendances supplémentaires qui ne sont pas distribuées dans le cadre de la bibliothèque standard.

La gestion des packages est si importante quepip a été inclus dans le programme d'installation de Python depuis les versions3.4 pour Python 3 et2.7.9 pour Python 2, et il est utilisé par de nombreux projets Python, ce qui en fait un outil essentiel pour chaque Pythonista.

Le concept de gestionnaire de packages peut vous être familier si vous venez d'autres langues. JavaScript utilisenpm pour la gestion des packages,Ruby utilisegem et.NET utiliseNuGet. En Python,pip est devenu le gestionnaire de paquets standard.

Le programme d'installation de Python installepip, il devrait donc être prêt à être utilisé, sauf si vous avez installé une ancienne version de Python. Vous pouvez vérifier quepip est disponible en exécutant la commande suivante dans votre console:

$ pip --version

pip 18.1 from C:\Python37\lib\site-packages\pip (python 3.7)

Vous devriez voir une sortie similaire affichant la version depip, ainsi que l'emplacement et la version de Python. Si vous utilisez une ancienne version de Python qui n'inclut paspip, vous pouvez l'installer en suivant les instructions pour votre système dans le fichierpip installation documentation.

Vous souhaiterez probablement suivre les exemples de ce didacticiel dans un environnement virtuel pour éviter d'installer des packages dans l'installation globale de Python. Vous pouvez en apprendre davantage sur les environnements virtuels dansPython Virtual Environments: A Primer. La sectionUsing Virtual Environments de cet article explique les bases de la création de nouveaux environnements virtuels.

Installation de packages avecpip

Python est considéré comme un langagebatteries included. Cela signifie que lePython standard library inclut un ensemble complet de packages et de modules pour aider les développeurs avec leurs scripts et applications.

Dans le même temps, Python a une communauté très active qui contribue à un ensemble encore plus important de packages qui peuvent vous aider avec vos besoins de développement. Ces packages sont publiés dans lesPython Package Index, également appelésPyPI (prononcésPie Pea Eye). PyPI héberge une vaste collection de packages comprenant des frameworks de développement, des outils et des bibliothèques.

Beaucoup de ces packages simplifient le développement Python en fournissant des interfaces conviviales aux fonctionnalités qui existent déjà dans la bibliothèque standard. Par exemple, vous pouvez écrire un script qui récupère le contenu d'une page Web en utilisant uniquement les bibliothèques standard incluses avec Python:

# In using-http.py

import cgi
import http.client

server = 'www.google.com'
url = '/'
conn = http.client.HTTPSConnection(server)
conn.request('GET', url)
response = conn.getresponse()
content_type = response.headers.get('Content-Type')
_, params = cgi.parse_header(content_type)
encoding = params.get('charset')
data = response.read()
text = data.decode(encoding)

print(f'Response returned: {response.status} ({response.reason})')
print('Body:')
print(text)

Dans ce script, vous importezcgi ethttp.client, tous deux inclus dans la bibliothèque standard Python. Vous créez un objetHTTPSConnection spécifiant le serveur et invoquez ses.request() et.getresponse() pour récupérer une réponse.

À partir de la réponse, vous pouvez récupérer l'en-têteContent-Type et l'analyser à l'aide du modulecgi pour extraire le jeu de caractères dans lequel la page est encodée.

cgi.parse_header() renvoie un tuple avec une valeur principale et un dictionnaire de paramètres. Par exemple, l'en-têteContent-Type peut contenir une valeur telle quetext/html; charset=ISO-8859-1.

Le tuple contiendra la chaînetext/html comme premier élément, et le deuxième élément sera un dictionnaire sous la forme{'charset': 'ISO-8859-1'}. Comme vous ne vous souciez que du paramètrecharset, vous pouvez ignorer le début du tuple en utilisant un trait de soulignement:_, params = cgi.parse_header(content_type).

Note:The Meaning of Underscores in Python explique comment utiliser des traits de soulignement pour décompresser les valeurs d'un tuple.

Une fois que vous avez l'encodage de la page, vous pouvez lire la réponse et la décoder en texte. Vous pouvez exécuter l'exemple dans la console pour voir comment cela fonctionne:

$ python using-http.py

Response returned: 200 (OK)
Body:
... Additional Output Omitted

Cela semble être beaucoup de travail pour un petit script qui récupère le contenu d'une page Web. Heureusement, il existe un package Python qui simplifie les requêtes HTTP et fournit une interface agréable pour faire exactement ce que vous voulez.

Installation de base du package

PyPI héberge une bibliothèque très populaire pour effectuer des requêtes HTTP appeléesrequests. Vous pouvez tout savoir à ce sujet dans sesdocumentation site officiels.

La première étape consiste à installer le packagerequests dans votre environnement. Vous pouvez en savoir plus sur les commandes prises en charge parpip en l'exécutant avechelp:

$ pip help

Usage:
  pip  [options]

Commands:
  install                     Install packages.
  download                    Download packages.
  uninstall                   Uninstall packages.
  freeze                      Output installed packages in requirements format.
  list                        List installed packages.
  show                        Show information about installed packages.
  check                       Verify installed packages have compatible
                              dependencies.
  config                      Manage local and global configuration.
  search                      Search PyPI for packages.
  wheel                       Build wheels from your requirements.
  hash                        Compute hashes of package archives.
  completion                  A helper command used for command completion.
  help                        Show help for commands.

General Options:
  -h, --help                  Show help.
  --isolated                  Run pip in an isolated mode, ignoring environment
                              variables and user configuration.
  -v, --verbose               Give more output. Option is additive, and can be
                              used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output. Option is additive, and can be
                              used up to 3 times (corresponding to WARNING,
                              ERROR, and CRITICAL logging levels).
  --log                 Path to a verbose appending log.
  --proxy              Specify a proxy in the form
                              [user:passwd@]proxy.server:port.
  --retries          Maximum number of retries each connection should
                              attempt (default 5 times).
  --timeout              Set the socket timeout (default 15 seconds).
  --exists-action     Default action when a path already exists:
                              (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort).
  --trusted-host    Mark this host as trusted, even though it does
                              not have valid or any HTTPS.
  --cert                Path to alternate CA bundle.
  --client-cert         Path to SSL client certificate, a single file
                              containing the private key and the certificate in
                              PEM format.
  --cache-dir            Store the cache data in .
  --no-cache-dir              Disable the cache.
  --disable-pip-version-check
                              Don't periodically check PyPI to determine
                              whether a new version of pip is available for
                              download. Implied with --no-index.

Comme vous pouvez le voir,pip fournit une commandeinstall pour installer les packages. Vous pouvez l'exécuter pour installer le packagerequests:

$ pip install requests

Looking in indexes: https://pypi.org/simple
Collecting requests
  Using cached
  https://files.pythonhosted.org/packages/7d/e3/
  20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/
  requests-2.21.0-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Using cached https://files.pythonhosted.org/packages/bc/a9/
  01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/
  chardet-3.0.4-py2.py3-none-any.whl
Collecting idna<2.9,>=2.5 (from requests)
  Using cached https://files.pythonhosted.org/packages/14/2c/
  cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/
  idna-2.8-py2.py3-none-any.whl
Collecting urllib3<1.25,>=1.21.1 (from requests)
  Using cached https://files.pythonhosted.org/packages/62/00/
  ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/
  urllib3-1.24.1-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests)
  Using cached https://files.pythonhosted.org/packages/9f/e0/
  accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/
  certifi-2018.11.29-py2.py3-none-any.whl
Installing collected packages: chardet, idna, urllib3, certifi, requests
Successfully installed certifi-2018.11.29 chardet-3.0.4 idna-2.8
  requests-2.21.0 urllib3-1.24.1
You are using pip version 18.1, however version 19.0.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip'
  command.

Vous devriez voir une sortie similaire à celle ci-dessus. Vous utilisezpip avec une commandeinstall suivie du nom du package que vous souhaitez installer. pip recherche le paquet dans PyPI, calcule ses dépendances et les installe pour s'assurer querequests fonctionnera.

Vous pouvez également voir que l'environnement actuel utilise la versionpip18.1, mais la version19.0.1 est disponible. Il montre également la commande que vous devez utiliser pour mettre à jourpip, alors faisons-le:

$ python -m pip install --upgrade pip

Looking in indexes: https://pypi.org/simple
Collecting pip
  Downloading https://files.pythonhosted.org/packages/46/dc/
  7fd5df840efb3e56c8b4f768793a237ec4ee59891959d6a215d63f727023/
  pip-19.0.1-py2.py3-none-any.whl (1.4MB)
    100% |████████████████████████████████| 1.4MB 2.0MB/s
Installing collected packages: pip
  Found existing installation: pip 18.1
    Uninstalling pip-18.1:
      Successfully uninstalled pip-18.1
Successfully installed pip-19.0.1

Notez que vous utilisezpython -m pour mettre à jourpip. Le commutateur-m indique à Python d'exécuter un module en tant qu'exécutable. Ceci est nécessaire car pour que vous puissiez mettre à jourpip, l'ancienne version doit être désinstallée avant d'installer la nouvelle version, et la supprimer lors de l'exécution de l'outil peut provoquer des erreurs.

Lorsque vous exécutezpip en tant que module, Python charge le module en mémoire et autorise la suppression du package pendant son utilisation. Vous pouvez exécuter des packages comme s'il s'agissait de scripts si le package fournit unhttps://docs.python.org/3/library/main.html [script de niveau supérieur]__main__.py.

Maintenant que vous avez installérequests et mis à niveaupip, vous pouvez utiliser la commandelist pour voir les packages installés dans votre environnement:

$ pip list

Package    Version
---------- ----------
certifi    2018.11.29
chardet    3.0.4
idna       2.8
pip        19.0.1
requests   2.21.0
setuptools 40.6.2
urllib3    1.24.1

Comme vous pouvez le voir,pip a été mis à niveau vers la version19.0.1 (la dernière version pour le moment), etrequests version2.21.0 a été installé.

La commandepip install <package> recherche toujours la dernière version du package et l'installe. Il recherche également les dépendances répertoriées dans les métadonnées du package et installe ces dépendances pour garantir que le package possède toutes les exigences dont il a besoin.

Comme vous pouvez le voir, plusieurs packages ont été installés. Vous pouvez consulter les métadonnées du package en utilisant la commandeshow danspip:

$ pip show requests

Name: requests
Version: 2.21.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: [email protected]
License: Apache 2.0
Location: py37\lib\site-packages
Requires: certifi, chardet, idna, urllib3
Required-by:

Les métadonnées répertorientcertifi,chardet,idna eturllib3 comme dépendances, et vous pouvez voir qu'elles ont également été installées.

Avec le packagerequests installé, vous pouvez modifier l'exemple ci-dessus et voir à quel point il est facile de récupérer le contenu d'une page Web:

# In using-requests.py

import requests

url = 'https://www.google.com'
response = requests.get(url)
print(f'Response returned: {response.status_code}, {response.reason}')
print(response.text)

Vous pouvez importer le packagerequests comme n'importe quel autre package standard car il est maintenant installé dans votre environnement.

Comme vous pouvez le voir,requests.get() gère la connexion HTTP pour vous et renvoie un objet de réponse similaire à l'exemple d'origine mais avec quelques améliorations d'interface.

Vous n’avez pas à vous occuper du codage de la page carrequests s'en chargera pour vous dans la plupart des situations. Pourtant,requests fournit une interface flexible pour gérer des cas spéciaux via l'objetrequests.Response.

Utilisation des fichiers d'exigences

La commandepip install installe toujours la dernière version publiée d'un package, mais parfois, vous souhaiterez peut-être installer une version spécifique dont vous savez qu'elle fonctionne avec votre code.

Vous souhaitez créer une spécification des dépendances et des versions que vous avez utilisées pour développer et tester votre application, il n'y a donc pas de surprise lorsque vous utilisez l'application en production.

Les fichiers d'exigences vous permettent de spécifier exactement les packages et les versions à installer. L'exécution depip help indique qu'il existe une commandefreeze qui génère les packages installés au format requis. Vous pouvez utiliser cette commande, redirigeant la sortie vers un fichier pour générer un fichier d'exigences:

$ pip freeze > requirements.txt
$ cat requirements.txt

certifi==2018.11.29
chardet==3.0.4
idna==2.8
requests==2.21.0
urllib3==1.24.1

La commandefreeze vide tous les packages et leurs versions sur la sortie standard, de sorte que vous pouvez rediriger la sortie vers un fichier qui peut être utilisé pour installer les exigences exactes dans un autre système. La convention est de nommer ce fichierrequirements.txt, mais vous pouvez lui donner le nom que vous voulez.

Lorsque vous souhaitez répliquer l'environnement dans un autre système, vous pouvez exécuterpip install en spécifiant le fichier de configuration à l'aide du commutateur-r:

$ pip install -r requirements.txt

Looking in indexes: https://pypi.org/simple
Collecting certifi==2018.11.29 (from -r .\requirements.txt (line 1))
  Using cached https://files.pythonhosted.org/packages/9f/e0/
  accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/
  certifi-2018.11.29-py2.py3-none-any.whl
Collecting chardet==3.0.4 (from -r .\requirements.txt (line 2))
  Using cached https://files.pythonhosted.org/packages/bc/a9/
  01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/
  chardet-3.0.4-py2.py3-none-any.whl
Collecting idna==2.8 (from -r .\requirements.txt (line 3))
  Using cached https://files.pythonhosted.org/packages/14/2c/
  cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/
  idna-2.8-py2.py3-none-any.whl
Collecting requests==2.21.0 (from -r .\requirements.txt (line 4))
  Using cached https://files.pythonhosted.org/packages/7d/e3/
  20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/
  requests-2.21.0-py2.py3-none-any.whl
Collecting urllib3==1.24.1 (from -r .\requirements.txt (line 5))
  Using cached https://files.pythonhosted.org/packages/62/00/
  ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/
  urllib3-1.24.1-py2.py3-none-any.whl
Installing collected packages: certifi, chardet, idna, urllib3, requests
Successfully installed certifi-2018.11.29 chardet-3.0.4 idna-2.8
  requests-2.21.0 urllib3-1.24.1

Les versions des packages correspondront à celles répertoriées dansrequirements.txt:

$ pip list

Package    Version
---------- ----------
certifi    2018.11.29
chardet    3.0.4
idna       2.8
pip        19.0.1
requests   2.21.0
setuptools 40.6.2
urllib3    1.24.1

Vous pouvez soumettre le fichierrequirements.txt au contrôle de code source et l'utiliser pour créer l'environnement exact sur d'autres machines.

Exigences de réglage fin

Le problème avechardcoding les versions de vos paquets et leurs dépendances est que les paquets sont fréquemment mis à jour avec des bogues et des correctifs de sécurité, et vous voudrez probablement en tirer parti dès qu'ils sont publiés.

Le format de fichier d'exigences vous permet de spécifier des versions de dépendances à l'aide d'opérateurs logiques qui vous offrent un peu de flexibilité pour garantir que les packages sont mis à jour, tout en définissant les versions de base d'un package.

Ouvrez le fichierrequirements.txt dans voseditor préférés et apportez les modifications suivantes:

certifi>=2018.11.29
chardet>=3.0.4
idna>=2.8
requests>=2.21.0
urllib3>=1.24.1

Vous pouvez changer l'opérateur logique en>= pour dire àpip d'installer une version exacte ou supérieure qui a été publiée. Lorsque vous définissez un nouvel environnement à l'aide du fichierrequirments.txt,pip recherche la dernière version qui satisfait à l'exigence et l'installe. Vous pouvez mettre à niveau les packages de votre fichier de configuration en exécutant la commandeinstall avec le commutateur--upgrade:

$ pip install --upgrade -r requirements.txt

Looking in indexes: https://pypi.org/simple
Requirement already up-to-date: certifi==2018.11.29 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 1)) (2018.11.29)
Requirement already up-to-date: chardet==3.0.4 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 2)) (3.0.4)
Requirement already up-to-date: idna==2.8 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 3)) (2.8)
Requirement already up-to-date: requests==2.21.0 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 4)) (2.21.0)
Requirement already up-to-date: urllib3==1.24.1 in \py37\lib\site-packages
  (from -r .\requirements.txt (line 5)) (1.24.1)

Rien n'a été mis à niveau car vous disposez des dernières versions, mais si une nouvelle version a été publiée pour un package répertorié, le package aurait été mis à niveau.

Dans un monde idéal, les nouvelles versions des packages seraient rétrocompatibles et n'introduiraient jamais de nouveaux bogues. Malheureusement, les nouvelles versions peuvent introduire des changements qui vont casser votre application. La syntaxe du fichier des exigences prend en charge desversion specifiers supplémentaires pour affiner vos exigences.

Supposons qu’une nouvelle version3.0 derequests soit publiée mais introduit une modification incompatible qui rompt votre application. Vous pouvez modifier le fichier des exigences pour empêcher l'installation de3.0 ou supérieur:

certifi>=2018.11.29
chardet>=3.0.4
idna>=2.8
requests>=2.21.0, <3.0
urllib3>=1.24.1

La modification du spécificateur de version pour le packagerequests garantit qu'aucune version supérieure ou égale à3.0 ne sera installée. La documentation depip fournit toutes les informations sur lesrequirements file format, et vous pouvez la consulter pour en savoir plus.

Dépendances de production et de développement

Tous les packages que vous installez lors du développement de vos applications ne seront pas des dépendances d'application. Il existe de nombreux packages publiés sur PyPI qui sont des outils de développement ou des bibliothèques que vous souhaitez exploiter pendant le processus de développement.

À titre d'exemple, vous souhaiterez probablement tester votre application de manière unitaire, vous avez donc besoin d'un cadre de test unitaire. Un framework populaire pour les tests unitaires estpytest. Vous souhaitez l'installer dans votre environnement de développement, mais vous ne le souhaitez pas dans votre environnement de production car il ne s'agit pas d'une dépendance d'application.

Vous créez un deuxième fichier d'exigences (requirements_dev.txt) pour répertorier les outils supplémentaires permettant de configurer un environnement de développement:

# In requirements_dev.txt
pytest>=4.2.0

Cela nécessite que vous utilisiezpip pour installer les deux fichiers requis:requirements.txt etrequirements_dev.txt. Heureusement, pip vous permet de spécifier des paramètres supplémentaires dans un fichier d'exigences. Vous pouvez modifierrequirements_dev.txt pour installer également les exigences à partir du fichier de productionrequirements.txt:

# In requirements_dev.txt
-r requirements.txt
pytest>=4.2.0

Notez que vous utilisez exactement le même commutateur-r pour installer le fichier de productionrequirements.txt. Lerequirements file format vous permet de spécifier des arguments supplémentaires directement sur un fichier d'exigences.

Exigences de gel pour la production

Vous avez créé les fichiers d'exigences de production et de développement et les avez ajoutés au contrôle de code source. Les fichiers utilisent des spécificateurs de version flexibles pour garantir que vous tirez parti des correctifs de bogues publiés par vos dépendances. Vous testez également votre application et êtes prêt à la déployer en production.

Vous voulez probablement vous assurer que les versions des dépendances que vous déployez en production sont exactement les mêmes versions que vous avez utilisées dans votre pipeline d'intégration ou processus de génération, car vous savez que tous les tests réussissent et que l'application fonctionne.

Les spécificateurs de version actuels ne garantissent pas que les mêmes versions seront déployées en production, vous devez donc geler les exigences de production comme vous l'avez vu précédemment.

Vous créez un environnement virtuel de production propre et installez les exigences de production à l'aide du fichierrequirements.txt. Une fois les exigences installées, vous pouvez figer les versions spécifiques, en vidant la sortie dans un fichierrequirements_lock.txt que vous utilisez en production. Le fichierrequirements_lock.txt contiendra des spécificateurs de versions exactes et peut être utilisé pour répliquer l'environnement.

Recherche de packages à utiliser

Au fur et à mesure que vous devenez un Pythonista plus expérimenté, il y aura un ensemble de packages que vous connaîtrez par cœur et que vous utiliserez dans la plupart de vos applications. Les packagesrequests etpytest sont de bons candidats pour devenir des outils utiles dans votre boîte à outils Python.

Il y aura des moments où vous devrez résoudre un problème différent, et vous voudrez chercher un outil ou une bibliothèque différent qui peut vous aider. Comme vous pouvez le voir ci-dessus,pip help montre qu'il existe une commandesearch qui recherche les packages publiés sur PyPI.

Voyons comment cette commande peut nous aider:

$ pip help search

Usage:
  pip search [options] 

Description:
  Search for PyPI packages whose name or summary contains .

Search Options:
  -i, --index            Base URL of Python Package Index
                              (default https://pypi.org/pypi)

General Options:
  -h, --help                  Show help.
  --isolated                  Run pip in an isolated mode, ignoring environment
                              variables and user configuration.
  -v, --verbose               Give more output. Option is additive, and can be
                              used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output. Option is additive, and can be
                              used up to 3 times (corresponding to WARNING,
                              ERROR, and CRITICAL logging levels).
  --log                 Path to a verbose appending log.
  --proxy              Specify a proxy in the form
                              [user:passwd@]proxy.server:port.
  --retries          Maximum number of retries each connection should
                              attempt (default 5 times).
  --timeout              Set the socket timeout (default 15 seconds).
  --exists-action     Default action when a path already exists:
                              (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort).
  --trusted-host    Mark this host as trusted, even though it does
                              not have valid or any HTTPS.
  --cert                Path to alternate CA bundle.
  --client-cert         Path to SSL client certificate, a single file
                              containing the private key and the certificate in
                              PEM format.
  --cache-dir            Store the cache data in .
  --no-cache-dir              Disable the cache.
  --disable-pip-version-check
                              Don't periodically check PyPI to determine
                              whether a new version of pip is available for
                              download. Implied with --no-index.
  --no-color                  Suppress colored output

La commande prend un ensemble d'options répertoriées ci-dessus et un<query>. La requête n'est qu'une chaîne à rechercher et correspondra aux packages et à leurs descriptions.

Note: Vous pouvez utiliserpip help <command> pour récupérer des informations supplémentaires sur une commande prise en charge.

Supposons que votre application ait besoin d'accéder à un service qui utiliseOAuth2 pour l'autorisation. Idéalement, il existe une bibliothèque qui fonctionne avecrequests ou avec une interface similaire qui peut nous aider. Cherchons PyPI en utilisantpip:

$ pip search requests oauth

requests-oauth (0.4.1)             - Hook for adding Open Authentication
                                     support to Python-requests HTTP library.
oauth (1.0.1)                      - Library for OAuth version 1.0a.
pmr2.oauth (0.6.1)                 - OAuth PAS Plugin, OAuth 1.0 provider for
                                     Plone.
oauth-proxy (1.0.5)                - OAuth HTTP proxy
django-oauth (1.1)                 - Support of OAuth in Django.
intuit-oauth (1.2.0)               - Intuit OAuth Client
brubeck-oauth (0.1.11)             - Brubeck OAuth module
guillotina-oauth (2.0.0)           - guillotina oauth support
httpie-oauth (1.0.2)               - OAuth plugin for HTTPie.
paytm-oauth (0.2)                  - Consumer for paytm oauth
plurk-oauth (0.9.2)                - Plurk OAuth API
oauth-flow (1.0.3)                 - Authenticate and make calls to OAuth 1.0,
                                     OAuth 2.0 services
... Additional Output Omitted

Le terme de recherche donne une collection assez étendue de packages. Certains d'entre eux semblent spécifiques à un service ou à une technologie commedjango-oauth. D'autres semblent prometteurs, commerequests-oauth. Malheureusement, il n'y a pas beaucoup d'informations autres qu'une brève description.

La plupart du temps, vous souhaitez rechercher des packages directement sur le site Web dePyPI. PyPI fournit des capacités de recherche pour son index et un moyen de filtrer les résultats par les métadonnées exposées dans le package, comme le cadre, la rubrique, l'état de développement, etc.

Une recherche des mêmes termes dans PyPI donne beaucoup de résultats, mais vous pouvez les filtrer par différentes catégories. Par exemple, vous pouvez développer lesIntended Audience et sélectionnerDevelopers puisque vous voulez une bibliothèque qui vous aide à développer votre application. En outre, vous souhaitez probablement un package stable et prêt pour la production. Vous pouvez développer la catégorieDevelopment Status et sélectionnerProduction/Stable:

PyPi Search Results for Requests OAuth

Vous pouvez appliquer des filtres supplémentaires et modifier les termes de recherche jusqu'à ce que vous trouviez le package que vous recherchez.

Les résultats fournissent un lien vers la page du package, qui contient plus d'informations et, espérons-le, une documentation. Jetons un coup d'œil aux informations pourrequests-oauth2:

PyPi Package Page for Requests OAuth 2

La page du projet fournit plus d'informations et semble avoir un lien vers la page d'accueil du projet. Le lien vous amène auxproject repository sur GitHub. Là, vous pouvez voir plus d'informations sur le projet et quelques exemples d'utilisation.

Trouver le référentiel de code source d'origine peut être une ressource inestimable. Vous y trouverez des conseils sur l'état du projet en consultant la date des dernières validations, le nombre de demandes de tirage et les problèmes ouverts, etc.

Une autre option pour trouver un package est de le rechercher sur Google. Les bibliothèques Python largement utilisées apparaîtront en haut des recherches Google et vous devriez pouvoir trouver un lien vers le package dans PyPI ou son référentiel de code source.

Trouver le bon package peut prendre un certain temps et des recherches, mais cela accélérera également votre processus de développement une fois que vous l'avez trouvé.

Désinstallation des packages

De temps en temps, vous devrez désinstaller un package. Soit vous avez trouvé une meilleure bibliothèque pour la remplacer, soit c'est quelque chose dont vous n'avez pas vraiment besoin. La désinstallation des packages peut être un peu délicate.

Notez que, lorsque vous avez installérequests,pip a également installé d'autres dépendances. Plus vous installez de packages, plus les chances que plusieurs packages dépendent de la même dépendance sont grandes. C'est là que la commandeshow danspip est utile.

Avant de désinstaller un package, assurez-vous d'exécuter la commandeshow pour ce package:

$ pip show requests

Name: requests
Version: 2.21.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: [email protected]
License: Apache 2.0
Location: c:\users\isaac\projects\virtualenv\py37\lib\site-packages
Requires: urllib3, certifi, chardet, idna
Required-by:

Notez les deux derniers champsRequires etRequired-by. La commandeshow nous indique querequests nécessiteurllib3,certifi,chardet etidna. Vous souhaitez probablement désinstaller ces deux. Vous pouvez également voir querequests n'est requis par aucun autre package, il est donc prudent de le désinstaller.

Vous devez exécuter la commandeshow sur toutes les dépendances derequests pour vous assurer qu'aucune autre bibliothèque n'en dépend également. Une fois que vous avez compris l'ordre de dépendance des packages que vous souhaitez désinstaller, vous pouvez les supprimer à l'aide de la commandeuninstall:

$ pip uninstall certifi

Uninstalling certifi-2018.11.29:
  Would remove:
    \py37\lib\site-packages\certifi-2018.11.29.dist-info\*
    \py37\lib\site-packages\certifi\*
Proceed (y/n)? y
  Successfully uninstalled certifi-2018.11.29

La désinstallation d'un package vous montre les fichiers qui seront supprimés et vous demandera une confirmation. Si vous êtes sûr de vouloir supprimer le package parce que vous avez vérifié ses dépendances et que vous savez que rien d’autre ne l’utilise, vous pouvez passer un commutateur-y pour supprimer la liste des fichiers et confirmer:

$ pip uninstall urllib3 -y

Uninstalling urllib3-1.24.1:
  Successfully uninstalled urllib3-1.24.1

$ pip uninstall chardet -y

Uninstalling chardet-3.0.4:
  Successfully uninstalled chardet-3.0.4

$ pip uninstall idna -y

Uninstalling idna-2.8:
  Successfully uninstalled idna-2.8

$ pip uninstall requests -y

Uninstalling requests-2.21.0:
  Successfully uninstalled requests-2.21.0

Vous pouvez spécifier tous les packages que vous souhaitez désinstaller en un seul appel:pip uninstall -y urllib3 chardet idna requests.

Vous pouvez également désinstaller tous les packages répertoriés dans un fichier d'exigences en fournissant l'option-r <requirments file>. La commande demandera une confirmation pour chaque paquet individuel, mais vous pouvez le supprimer, si vous savez ce que vous faites, avec le commutateur-y:

$ pip uninstall -r requirements.txt -y

Uninstalling certifi-2018.11.29:
  Successfully uninstalled certifi-2018.11.29
Uninstalling chardet-3.0.4:
  Successfully uninstalled chardet-3.0.4
Uninstalling idna-2.8:
  Successfully uninstalled idna-2.8
Uninstalling requests-2.21.0:
  Successfully uninstalled requests-2.21.0
Uninstalling urllib3-1.24.1:
  Successfully uninstalled urllib3-1.24.1

N'oubliez pas de toujours vérifier les dépendances des packages que vous souhaitez désinstaller. Vous souhaitez probablement désinstaller toutes ses dépendances, mais la désinstallation d'un package utilisé par d'autres interrompt votre application.

Alternatives àpip

pip est un outil essentiel pour tous les pythonistes, et il est utilisé par de nombreuses applications et projets pour la gestion des paquets. Ce didacticiel vous a aidé avec les bases, mais la communauté Python est très active dans la fourniture d'excellents outils et bibliothèques à utiliser par d'autres développeurs. Celles-ci incluent d'autres alternatives àpip qui tentent de simplifier et d'améliorer la gestion des paquets.

Dans cette section, vous découvrirez les autres outils de gestion de packages disponibles pour Python.

Conda fait tout

Conda est un gestionnaire de packages, de dépendances et d'environnement pour de nombreux langages, y compris Python. En fait, son origine vient deAnaconda, qui a commencé comme un package de science des données pour Python.

Conda est largement utilisé pour les applications de science des données et d'apprentissage automatique, et utilise ses propresindex pour héberger des packages compatibles.

Conda vous permet non seulement de gérer les dépendances des packages, mais il gère également les environnements virtuels pour vos applications, installe des distributions Python compatibles et conditionne votre application pour le déploiement en production.

Setting Up Python for Machine Learning on Windows est une excellente introduction à Conda qui explore la gestion des paquets et de l'environnement. Les seules informations spécifiques à Windows concernent l'installation, elles sont donc toujours pertinentes si vous utilisez une autre plate-forme de système d'exploitation.

Pipenv

Pipenv est un autre outil de gestion de packages qui «vise à apporter le meilleur de tous les mondes de packaging» à Python. Il gagne beaucoup de terrain au sein de la communauté Python car il fusionne l'environnement virtuel et la gestion des packages dans un seul outil.

Il résout également certains des problèmes les plus courants que vous rencontrerez lors de la gestion manuelle des dépendances viapip, comme les versions de packages, la séparation des dépendances de développement et de production et le verrouillage des versions pour la production.

Pipenv: A Guide to the New Python Packaging Tool est un bon début pour en savoir plus sur Pipenv et son approche de la gestion des paquets. Même si l'article est marqué commeintermediate, l'auteur fait un excellent travail en guidant le lecteur sur le fait que l'article est accessible à toute personne commençant par Python.

Poésie

Poetry est une autre alternative depip qui gagne beaucoup en traction. Comme Pipenv, il simplifie la gestion des versions des packages et sépare les dépendances de développement et de production, et il fonctionne en isolant ces dépendances dans un environnement virtuel.

Si vous venez deJavaScript etnpm, alors Poetry vous semblera très familier. Cela va au-delà de la gestion des packages, vous aidant à créer des distributions pour vos applications et bibliothèques et à les déployer sur PyPI. How to Publish an Open-Source Python Package to PyPI a un bonintroduction to Poetry et peut vous aider à démarrer.

Conclusion: qu'est-ce quepip?

Ce tutoriel a répondu à la question, qu'est-ce que pip? Vous avez vu quepip est un gestionnaire de packages pour Python, utilisé par de nombreux projets pour gérer les dépendances. Il est inclus avec le programme d'installation de Python, ce qui en fait un outil essentiel pour tous les Pythonistas pour savoir comment l'utiliser.

Python fournit une bibliothèque standard étendue adaptée au développement de toutes sortes d'applications, mais la communauté Python active fournit un ensemble encore plus large d'outils et de bibliothèques qui accélèrent le développement d'applications Python.

Ces outils et bibliothèques sont publiés sur lePython Package Index (PyPI), etpip permet aux développeurs de les installer dans leurs environnements d'application.

Dans ce didacticiel, vous avez appris:

  • Installation de nouveaux packages à l'aide depip dans la ligne de commande et avec les fichiers d'exigences

  • Gestion des dépendances, séparation des exigences de développement et de production et création d'un fichier d'exigences verrouillé

  • Recherche de packages viapip et PyPI

  • Évaluation des dépendances de package avant de désinstaller un package et commentpip désinstalle les packages

De plus, vous avez appris l’importance de maintenir les dépendances à jour et les alternatives àpip qui peuvent vous aider à gérer ces dépendances.

N'hésitez pas à nous contacter dans la section commentaires ci-dessous pour toute question que vous pourriez avoir, et vous pouvez toujours obtenir plus d'informations aupip documentation page.