web-dev-qa-db-fra.com

Quel est le but "pip install --user ..."?

De pip install --help:

 --user      Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on
             Windows. (See the Python documentation for site.USER_BASE for full details.)

La documentation de site.USER_BASE est un trou de ver terrifiant de sujets NIX intéressants que je ne comprends pas.

Quel est le but de --user en clair? Pourquoi installer le paquet dans ~/.local/ importerait-il? Pourquoi ne pas simplement mettre un exécutable quelque part dans mon $ PATH?

111
Rob Truxal

pip installe par défaut les packages Python dans un répertoire système (tel que /usr/local/lib/python3.4). Cela nécessite un accès root.

--user permet à la place d'installer des paquetages dans votre répertoire personnel, ce qui ne nécessite aucun privilège spécial.

133
duskwuff

_--user_ installe dans site.USER_SITE .

Pour mon cas, c'était _/Users/.../Library/Python/2.7/bin_. J'ai donc ajouté cela à mon PATH (dans le fichier _~/.bash_profile_):

_export PATH=$PATH:/Users/.../Library/Python/2.7/bin
_
16

D'autres réponses mentionnent site.USER_SITE comme où Python paquets sont placés. Si vous recherchez des fichiers binaires, ceux-ci vont dans {site.USER_BASE}/bin.

Si vous souhaitez ajouter ce répertoire au chemin de recherche de votre shell, utilisez:

export PATH="${PATH}:$(python3 -c 'import site; print(site.USER_BASE)')/bin"
7
rgov

Sur un système d'exploitation MAC, l'indicateur --user est utilisé pour s'assurer que nous ne corrompons pas les bibliothèques sur lesquelles le système d'exploitation repose. Une approche conservative prudente pour de nombreux utilisateurs de MAC OS consiste à éviter d'installer ou de mettre à jour pip avec une commande nécessitant Sudo. Cela inclut donc l’installation sur /usr/local/bin...

Réf.: Installation de python pour Neovim ( https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim )

Je ne suis pas tout au juste pourquoi installer dans /usr/local/bin est un risque sur un MAC, étant donné que le système ne s'appuie que sur python binaires dans /Library/Frameworks/ et /usr/bin. Je suppose que c'est parce que, comme indiqué ci-dessus, l'installation dans /usr/local/bin nécessite Sudo, ce qui ouvre la porte à une erreur coûteuse avec les bibliothèques système. Ainsi, installer dans ~/.local/bin est un moyen sûr d’éviter ce risque.

Réf.: Utilisation de python sur un Mac ( https://docs.python.org/2/using/mac.html )

Enfin, dans la mesure où il est avantageux d'installer des packages dans le /usr/local/bin, je me demande s'il est logique de changer le propriétaire du répertoire de root à user? Ceci éviterait de devoir utiliser Sudo tout en vous protégeant contre les modifications dépendantes du système. * S'agit-il d'un défaut de sécurité? les systèmes étaient plus souvent utilisés dans le passé (comme serveurs)? Ou au moins, juste un bon moyen d’aller pour les utilisateurs de MAC n’hébergeant pas de serveur?

* Remarque: la fonction SIP (System Integrity Protection) de Mac semble également protéger l'utilisateur des modifications apportées aux bibliothèques dépendant du système.

- E

7
Edmund's Echo

Le meilleur moyen d’installer virtualenv ne nécessite pas la confusion --user. Vous obtiendrez plus de flexibilité et ne craindrez plus les différentes versions et projets python à chaque fois que vous installez un paquet.

https://virtualenv.pypa.io/en/stable/

3
user603749

Juste un avertissement:

Selon ce problème , --user n'est actuellement pas valide dans la variable pip d'un env virtuel, puisqu'un emplacement d'utilisateur n'a pas vraiment de sens pour un environnement virtuel.

Donc, n'utilisez pas pip install --user some_pkg dans un environnement virtuel , sinon, le pip de l'environnement virtuel sera confondu. Voir cette réponse pour plus de détails.

1
YaOzI