Bonjour encore. En prévision du démarrage d'un nouveau fil sur le cours Machine Learning , nous souhaitons partager une traduction de l'article, qui a une relation assez indirecte avec ML, mais sera certainement utile aux abonnés de notre blog.

Mariatta , un développeur canadien, a demandé sur
python -m pip sur Twitter, lui demandant de parler de cet idiome et d'expliquer comment cela fonctionne.
J'ai récemment appris que vous devez écrire python -m pip au lieu de l'installation habituelle de pip, mais maintenant je ne me souviens plus de qui j'ai entendu parler. Probablement de @brettsky ou @zooba . L'un d'entre vous a-t-il un article de blog pour que je puisse le partager avec les lecteurs?
- Mariatta ( @mariatta
) 29 octobre 2019 ( https://twitter.com/mariatta/status/1189243515739561985?ref_src=twsrc%5Etfw )
Je ne suis pas sûr de ce que j'ai dit à Mariatta à propos de
python -m pip , mais il y a toutes les chances que ce soit moi, car j'ai demandé que cette instruction pour l'installation de packages à l'aide de
PyPI soit écrite de cette façon depuis 2016. Donc, cet article devrait expliquer ce qu'est
python -m pip et pourquoi vous devriez l'utiliser lors du démarrage de
pip .
Qu'est-ce que python -m pip?
Pour commencer,
python -m pip exécute pip en utilisant la version de Python que vous avez spécifiée pour l'instruction python. Ainsi,
/usr/bin/python3.7 -m pip
signifie que vous exécutez
pip pour l'interpréteur situé dans
/usr/bin/python3.7
. Vous pouvez lire la
documentation sur l'indicateur
-m
si vous ne savez pas comment cela fonctionne (au fait, c'est extrêmement utile).
Pourquoi utiliser python -m pip au lieu de pip / pip3?
Vous pouvez dire: "D'accord, mais pourquoi ne puis-je pas simplement utiliser
pip en exécutant la commande
pip ?" La réponse est: "Oui, mais vous aurez moins de contrôle sur elle." Je vais expliquer ce que signifie «moins de contrôle» avec un exemple.
Supposons que j'ai deux versions de Python installées, par exemple, Python 3.7 et 3.8 (cela est très courant chez les personnes qui travaillent sur Mac OS ou Linux, sans parler du fait que vous vouliez probablement jouer avec Python 3.8, et que vous aviez déjà Python 3.7). Donc, si vous tapez
pip dans le terminal, pour quel interpréteur Python allez-vous installer le package?
Sans informations plus détaillées, vous ne connaîtrez pas la réponse. Tout d'abord, vous devrez comprendre ce qui se trouve dans PATH, c'est-à-dire que
/usr/bin
va en premier ou
/usr/local/bin
(qui sont les endroits les plus courants pour installer Python, en général
/usr/local/
va en premier). Donc, vous vous souvenez où vous avez installé Python 3.7 et 3.8 et qu'il s'agissait de répertoires différents, et vous saurez ce qui est arrivé en premier dans PATH. Supposons que vous ayez installé les deux manuellement, peut-être que Python 3.7.3 était déjà préinstallé sur votre système et que vous avez installé Python 3.7.5. Dans ce cas, les deux versions de Python sont installées dans
/usr/local/bin
. Pouvez-vous me dire maintenant à quel
pip est maintenant attaché?
Vous ne connaissez pas la réponse. Si vous ne savez pas quand chaque version a été installée et que vous comprenez que la dernière version de
pip a été écrite dans
/usr/local/bin/pip
, mais vous ne savez pas quel interpréteur sera utilisé pour la commande
pip . Maintenant, vous pouvez dire: "J'installe toujours les dernières versions, ce qui signifie que Python 3.8.0 sera installé en dernier, car il est plus récent que, par exemple, 3.7.5." D'accord, mais que se passe-t-il lorsque Python 3.7 sort .6? Votre
pip ne serait plus utilisé depuis Python 3.8, mais depuis Python 3.7.
Lorsque vous utilisez
python -m pip avec l'interpréteur python spécifique dont vous avez besoin, toute ambiguïté disparaît. Si j'écris
python3.8 -m pip , je sais exactement quel
pip sera utilisé et que le paquet sera installé pour Python 3.8 (la même chose se produirait si je pointais python3.7).
Si vous utilisez Windows, vous avez une incitation supplémentaire à utiliser
python -m pip , car il permet à
pip de se mettre
à jour lui-même. Principalement parce que
pip.exe est considéré comme en cours d'exécution lorsque vous écrivez
pip install --upgrade pip . À ce stade, Windows ne vous permettra pas de réinstaller
pip.exe . Cependant, si vous effectuez l'
installation de python-m pip --upgrade pip , vous contournez ce problème lorsque
python.exe est lancé, et non
pip.exe .
Et que se passe-t-il lorsque je suis dans un environnement activé?
Habituellement, lorsque j'explique l'essence de cet article aux gens, il y a toujours quelqu'un qui dit: "J'utilise toujours l'environnement virtuel, et cela ne s'applique pas à moi." Eh bien, pour commencer, il serait TOUJOURS bon d'utiliser un environnement virtuel! (J'expliquerai pourquoi je le pense dans un de mes prochains articles!) Mais pour être honnête, j'insisterais toujours sur l'utilisation de
python -m pip , même si, à proprement parler, ce n'est pas nécessaire.
Tout d'abord, si vous utilisez Windows, vous souhaitez toujours utiliser
python-m pip afin de pouvoir mettre à jour
pip dans votre environnement.
Deuxièmement, même si vous utilisez un système d'exploitation différent, je dirais que vous devez toujours utiliser
python-m pip , car cela fonctionnera quelle que soit la situation. Il vous avertira d'une erreur si vous oubliez d'activer l'environnement, et quiconque vous surveillera adoptera les meilleures pratiques. Et personnellement, je ne pense pas que sauver 10 frappes soit un prix important pour ne pas utiliser les bonnes pratiques. Et cette commande vous aidera également à éviter les erreurs lors de l'écriture de scripts d'automatisation qui effectueront des opérations manifestement incorrectes si vous oubliez d'activer l'environnement.
Personnellement, lorsque j'utilise un outil dont le travail dépend de l'interpréteur qu'il démarre, j'utilise toujours
-m
, que l'environnement virtuel soit activé ou non. Il est toujours important pour moi de comprendre quel interprète Python j'utilise.
TOUJOURS utiliser l'environnement! Ne mettez pas tout de suite dans l'interpréteur global!
Lorsque nous parlons de la façon d'éviter toute confusion lors de l'installation en Python, je tiens à souligner que nous ne devons rien installer dans l'interpréteur Python global lorsque nous travaillons localement (les conteneurs sont une toute autre affaire)! S'il s'agit du Python préinstallé de votre système, alors si vous installez une version incompatible de la bibliothèque sur laquelle votre système d'exploitation s'appuie, alors vous allez réellement casser le système.
Mais même si vous installez une copie de
python séparément pour vous-même, je déconseille toujours de l'installer directement dans le développement local. En fin de compte, vous utiliserez divers packages dans vos projets qui peuvent entrer en conflit les uns avec les autres, et vous n'aurez pas une idée claire des dépendances au sein de vos projets. Il est préférable d'utiliser des environnements pour isoler les projets et outils individuels les uns des autres. La communauté Python utilise deux types d'environnements: les environnements virtuels et les environnements conda. Il existe même un moyen spécial d'installer les outils Python de manière isolée.
Si vous devez installer un outil
Pour une installation
autonome de l'outil, je peux recommander l'utilisation de
pipx . Chaque outil recevra son propre environnement virtuel, afin de ne pas entrer en conflit avec les autres. Ainsi, si vous ne souhaitez avoir qu'une seule installation, par exemple
Black , vous pouvez travailler sans interrompre accidentellement votre seule installation de
mypy .
Si vous avez besoin d'un environnement de projet (et que vous n'utilisez pas conda)
Lorsque vous avez besoin de créer un environnement pour un projet, je me tourne personnellement toujours vers les environnements virtuels et
venv . Il est inclus dans
stdlib Python, il est donc toujours disponible en utilisant
python-m venv (sauf, bien sûr, si vous utilisez Debian ou Ubuntu, auquel cas vous devrez peut-être installer le paquet
apt python3-venv ). Un peu d'histoire: j'ai en fait supprimé l'ancienne commande
pyvenv installée par Python pour créer des environnements virtuels à l'aide de
venv , pour les mêmes raisons pour lesquelles vous devez utiliser
python -m pip au lieu de
pip . Autrement dit, il n'est pas clair pour quel interprète vous avez créé l'environnement virtuel à l'aide de l'ancienne
commande pyvenv . Et rappelez-vous que vous n'avez pas besoin d'activer l'environnement pour utiliser l'interpréteur qu'il contient, car
.venv/bin/python
fonctionne aussi bien
.venv/bin/python
l'environnement et entrer la commande
python .
Aujourd'hui, certains développeurs préfèrent toujours
virtualenv , car il est disponible en Python 2 et dispose de fonctionnalités supplémentaires. Personnellement, je ne m'intéresse guère aux fonctionnalités supplémentaires, et ayant intégré
venv signifie que je n'ai pas besoin d'utiliser
pipx pour installer
virtualenv sur chaque machine. Mais si
venv ne répond pas à vos besoins et que vous souhaitez un environnement virtuel, voyez si
virtualenv offre ce dont vous avez besoin.
Si vous utilisez conda
Si vous utilisez
conda , vous pouvez utiliser des environnements
conda pour obtenir le même effet que les environnements virtuels fournis par
venv peuvent offrir. Je ne vais pas vous dire si vous devez utiliser conda ou venv dans votre situation spécifique, mais si vous utilisez
conda , alors vous savez que vous pouvez (et devriez) créer des environnements
conda pour votre travail, au lieu d'installer tout dans votre propre installation du système. Ainsi, vous pouvez comprendre clairement les dépendances de votre projet (et c'est une bonne raison d'utiliser
miniconda au lieu de full
anaconda , car la première représente moins d'un dixième du volume de la seconde).
Il y a toujours des conteneurs
Travailler dans un conteneur est un moyen de ne pas du tout gérer l'environnement, car toute votre «machine» deviendra un environnement séparé. Jusqu'à ce que vous ayez installé Python dans le système de conteneurs, vous devriez pouvoir effectuer une installation globale en toute sécurité afin que votre conteneur reste simple et direct.
Je répète que vous comprenez vraiment l'essence ...
N'installez rien dans votre interpréteur Python global! Essayez toujours d'utiliser l'environnement pour le développement local!Je ne peux plus dire combien de fois j'ai dû aider quelqu'un qui pensait que pip était installé dans un interpréteur Python, mais en fait installé dans un autre. Et cette quantité incommensurable s'applique également aux moments où les gens ont cassé tout le système ou se sont demandé pourquoi ils ne pouvaient pas installer quelque chose qui contredisait quelque chose qu'ils avaient précédemment défini pour un autre projet, etc. car ils n'ont pas pris la peine de configurer l'environnement sur leur machine locale.
Par conséquent, pour que vous et moi puissions dormir paisiblement, utilisez
python-m pip et essayez de toujours utiliser l'environnement.