Je suis nouveau sur Ubuntu, alors je vous en prie, supportez-moi. J'ai installé pip
en utilisant la commande suivante: Sudo apt-get -y install python-pip
. Ensuite, j'ai installé NLTK en utilisant la commande de leur site Web, qui était: Sudo pip install -U nltk
. Mais ensuite je suis tombé sur cette question qui dit que tout ce que j'ai fait était une "pratique rompue". La ligne qui m'a le plus frappé est que l'utilisation de Sudo pip
est intrinsèquement fausse et que donner pip
trop de force pourrait endommager les fichiers du système d'exploitation. Quelqu'un peut-il valider cette affirmation?
Note - J'ai seulement utilisé Sudo
car quand j'ai essayé la commande apt-get -y install python-pip
cela m'a donné 2 erreurs:
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
Sudo pip install
et son autre variante commune Sudo -H pip install
devraient ne pas être encouragés, car le fait d'utiliser les privilèges root pour utiliser pip
pour installer Python packages de PyPI (Python Package Index).
De https://stackoverflow.com/a/21056000/486919 (l'emphase est la mienne):
Lorsque vous exécutez
pip
avecSudo
name__, vous exécutezsetup.py
avecSudo
name__. En d'autres termes, vous exécutez du code Python arbitraire à partir d'Internet en tant que root. Si quelqu'un installe un projet malveillant sur PyPI et que vous l'installez, vous accordez à un attaquant un accès root à votre ordinateur. . Avant l’adoption de correctifs récents pourpip
et PyPI, un attaquant pourrait également faire passer une attaque de type homme au milieu pour injecter son code lorsque vous téléchargiez un projet fiable.
Comme mentionné à https://security.stackexchange.com/a/79327/8761 , il est important de noter que quelqu'un peut télécharger Python des packages, y compris malveillants, vers PyPI.
En bref, conformément au principe du plus petit privilège , n'utilisez pas Sudo
avec pip
pour installer les paquets Python à partir de PyPI, sauf obligation absolue. Au lieu de cela, envisagez d'utiliser pip install --user
(notez que pip install
sans Sudo
ni d'autres indicateurs/options par défaut à pip install --user
sous Ubuntu actuellement) ou des environnements virtuels (tels que virtualenv
name__). Si vous voyez des gens recommander Sudo pip
ou Sudo -H pip
, veuillez leur dire de ne pas le faire.
Vous devez utiliser Sudo
pour installer pip avec apt (Sudo apt install python-pip
), mais comme indiqué dans Réponse de edwinksl vous ne devriez pas utiliser Sudo
pour installer des paquets avec pip , vous devriez utiliser pip install --user <package>
à installer uniquement pour votre utilisateur, ou utilisez un virtualenv pour restreindre encore davantage la portée du paquet.
Apt installe les paquets à partir des référentiels Ubuntu, tandis que pip installe les paquets téléchargés par l'utilisateur depuis PyPi, qui pourraient être malveillants.
Et pour une réponse plus tempérée:
Sudo apt-get install ...
, c’est exactement comme cela que l’outil a été conçu.Sudo [-H]
avec pip install
est à la fois possible et facultatif, en fonction de ce que vous voulez faire exactement (et donc de "controverse").L'un des devises de Python est "Il devrait y en avoir un - et de préférence un seul - moyen évident de le faire." Et comme la plupart des slogans, elle semble rompre avec une joie sardonique à chaque occasion. (C'est pourquoi les devises existent, je suppose.) Malheureusement, à mon humble avis, l'écosystème Python se compose de nombreux conflits " règles strictes et rapides ", ne jamais être enfreint ... sauf pour" yada yada yada "(diable, détails, etc.). Dans presque tous les cas, cela est dû à l'évolution historique de la langue et des outils (et aux personnes qui veulent/ont besoin d'une leçon d'histoire lorsqu'elles veulent juste continuer leur travail) - mais cela peut aussi être dû aux différences entre Mac/Win/* Les plates-formes Nix (par exemple, Unix/Linux ont une mentalité similaire, mais ont l'avantage d'une maturité plus longue de plusieurs décennies.) Donc s'il vous plaît prenez toutes ces choses "pratique brisée" & "intrinsèquement erroné" cultiste le cargo avec une énorme pincement de sel. Certains veulent vraiment bien dire. (Les autres ne sont que méchants.)
Tout d'abord, plutôt que des "installations par utilisateur" de base, vous préférerez presque toujours une virtualenv, car en réalité, c'est probablement ce dont vous aurez besoin. Donc, vous pourriez aussi bien commencer par cela maintenant. Comment cela est fait, exactement, "dépend" (voir la devise Python, ci-dessus). Si vous utilisez Conda (principalement pour Mac et Windows), il sera configuré avec Conda . Si vous utilisez "pure" Python [sic] , cela dépend de la version et de ce que python vous utils ont, mais virtualenvwrapper est très pratique.
Deuxièmement, juste comme contre-exemple à la règle "jamais de Sudo", vous préférerez peut-être Sudo -H pip install -U numpy
, ce qui est parfaitement correct, voire avantageux, en ce sens qu’il permet d’éviter le téléchargement/la réinstallation/la maintenance de grandes bibliothèques, là où vous voulez seulement./besoin d’une version, dans chaque virtualenv séparément. De grands frameworks populaires tels que scikit-learn, NumPy, matplotlib, SciPy, pandas, etc., peuvent être installés une fois pour toutes et réutilisés dans plusieurs environnements . De plus, votre administrateur système local sympathique pourrait peut-être les installer pour tous les utilisateurs d'un système - et ils le feraient bien évidemment via Sudo
, ainsi, par exemple, pour des installations plus complexes, telles que TensorFlow.
Enfin, si vous installez une bibliothèque aléatoire tierce qui fait telle ou telle chose (API Twitter, conversion de texte, formatage de code, etc.), je suis tout à fait d’accord - ne l’installez pas en tant que root via Sudo. Bien sûr, installez-le en tant qu'utilisateur actuel. Mais souvenez-vous simplement que votre compte utilisateur contient toutes vos données importantes .
L’utilisation de "Sudo pip install" peut écraser le contenu de python fourni par votre fournisseur de système d’exploitation. Lorsque cela se produit, les packages des fournisseurs concernés ne passeront pas un "rpm --verify" et vos packages sembleront corrompus.
Souhaitez-vous utiliser les outils d'administration système que votre fournisseur de système d'exploitation a testés, ou puis-je utiliser des composants non testés que vous avez téléchargés à partir d'Internet?
Quand, et pas si, un paquet malveillant sera téléchargé sur PyPI ... les personnes qui utilisent "Sudo pip install" finiront par exécuter cette charge malveillante avec des privilèges système complets. Veux-tu çà? (#principleofleastprivilege)
S'il ne s'agit que de votre ordinateur portable et que vous ne risquez que quelques photos de chat, le risque est probablement faible ... mais s'il s'agit d'un système multi-utilisateur, le risque est maintenant multiplié par N. Si vous disposez de données de système ayant de la valeur, ou la disponibilité ou la fiabilité du système ayant de la valeur, les risques augmentent également.
N'hésitez pas à choisir votre propre aventure, mais veuillez vous procurer le consentement éclairé des autres utilisateurs susceptibles d'être affectés par votre choix. Ils peuvent ne pas être à l'aise avec le même niveau de risque que vous.
Pour ajouter à ces réponses: je ne connais pas Ubuntu, mais sur Fedora, je peux utiliser le format Sudo dnf install python3-numpy
pour installer BEAUCOUP paquets utiles pour moi. Cela n'a pas l'inconvénient d'être peu sûr (le responsable de distro repo a validé des paquets), mais vous permet également de l'installer à l'échelle du système. Le seul inconvénient est que les versions de distro repo peuvent être légèrement en retard sur les paquets dans PyPI.