Pourquoi utiliser python -m pip

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.

Source: https://habr.com/ru/post/fr475392/


All Articles