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 intéressants * NIX que je ne comprends pas.
Quel est le but de --user
en anglais simple? Pourquoi l'installation du paquet ~/.local/
importerait-elle? Pourquoi ne pas simplement mettre un exécutable quelque part dans mon $ PATH?
python
python-3.x
pip
virtualenv
Rob Truxal
la source
la source
import site; print site.USER_SITE
imprimer l'emplacement d'installation. Pour moi, j'ai/${HOME}/.local/lib/python${PY_MAJOR}.${PY_MINOR}/site-packages
./usr/local/lib/pythonX.X/dist-packages
est le répertoire par défaut des packages installés par pip . Mais si un utilisateur souhaite installer des packages spécifiques à l'utilisateur, il peut utiliser$ sudo pip3 --user install some_package
. Ce package restera indisponible pour les groupes et autres personnes qui accèdent à cet hôte.Réponses:
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
fait à la place de pip installer les packages dans votre répertoire personnel, ce qui ne nécessite aucun privilège spécial.la source
--user
s'assurer que l'on n'exécute pas le paquet en tant que root? (J'imagine quelque chose de similaire aux options Wireshark / kismet / burpsuite pour configurer des politiques d'accès de groupe, ce qui ne permet pas à toutes les fonctionnalités du programme de s'exécuter en tant que root. Est-ce sur la bonne voie?) Ou l'--user
option est-elle simplement destinée pour permettre l'installation sans privilèges root? Si tel est le cas, pourquoi je ne l'utilise jamaissudo pip install foo_package
? Je n'ai jamais eu besoin d'installer des privilèges root via pip auparavant.--user
paramètre concerne l'isolation de l'utilisateur! Cela fait comme une quantité ridicule de sens. Merci @NDEthos!pip freeze --user
?--user
s'installe danssite.USER_SITE
.Pour mon cas, c'était le cas
/Users/.../Library/Python/2.7/bin
. J'ai donc ajouté cela à mon PATH (dans le~/.bash_profile
fichier):la source
D'autres réponses mentionnent l'
site.USER_SITE
endroit où les packages Python sont placés. Si vous recherchez des binaires, ceux-ci entrent{site.USER_BASE}/bin
.Si vous souhaitez ajouter ce répertoire au chemin de recherche de votre shell, utilisez:
la source
Juste un avertissement:
Selon ce problème ,
--user
n'est actuellement pas valide dans unpip
environnement virtuel, car l'emplacement d'un utilisateur n'a pas vraiment de sens pour un environnement virtuel.N'utilisez donc pas
pip install --user some_pkg
dans un environnement virtuel , sinon, l'environnement virtuelpip
sera confus. Voir cette réponse pour plus de détails.la source
Le meilleur moyen est d'installer
virtualenv
et de ne pas exiger la--user
confusion. Vous obtiendrez plus de flexibilité et ne vous soucierez pas de supprimer les différentes versions et projets de Python chaque fois que vous installez un package.https://virtualenv.pypa.io/en/stable/
la source
Sur macOS, la raison de l'utilisation de l'
--user
indicateur est de s'assurer que nous ne corrompons pas les bibliothèques sur lesquelles le système d'exploitation repose. Une approche conservatrice pour de nombreux utilisateurs de macOS consiste à éviter d'installer ou de mettre à jour pip avec une commande qui nécessitesudo
. Ainsi, cela inclut 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 à fait clair pourquoi l'installation dans
/usr/local/bin
est un risque sur un Mac étant donné que le système ne repose que sur des binaires python dans/Library/Frameworks/
et/usr/bin
. Je soupçonne que c'est parce que, comme indiqué ci-dessus, l'installation dans/usr/local/bin
nécessitesudo
ce qui ouvre la porte à une erreur coûteuse avec les bibliothèques système. Ainsi, l'installation 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 y a un avantage à installer des packages dans le
/usr/local/bin
, je me demande s'il est logique de changer le propriétaire du répertoire deroot
àuser
? Cela éviterait d'avoir à utilisersudo
tout en protégeant contre les modifications dépendant du système. * Est-ce un défaut de sécurité, une relique de la façon dont les systèmes Unix étaient plus souvent utilisés dans le passé (en tant que serveurs)? Ou au minimum, juste une bonne solution pour les utilisateurs de Mac n'hébergeant pas de serveur?* Remarque: la fonction de protection de l'intégrité du système (SIP) de Mac semble également empêcher l'utilisateur de modifier les bibliothèques dépendant du système.
- E
la source
Sans environnements virtuels
pip <command> --user
modifie la portée de la commande pip actuelle pour qu'elle fonctionne sur l'emplacement d'installation du package Python local du compte d'utilisateur actuel, plutôt que sur l'emplacement d'installation du package à l'échelle du système, qui est la valeur par défaut.Cela n'a vraiment d'importance que sur une machine multi-utilisateurs. Tout ce qui est installé à l'emplacement du système sera visible par tous les utilisateurs, donc l'installation à l'emplacement de l'utilisateur gardera l'installation de ce package séparée des autres utilisateurs (ils ne le verront pas et devront l'installer eux-mêmes pour l'utiliser). Comme il peut y avoir des conflits de version, l'installation d'un package avec les dépendances requises par d'autres packages peut poser des problèmes, il est donc préférable de ne pas pousser tous les packages qu'un utilisateur donné utilise vers l'emplacement d'installation du système.
--user
emplacement. Il sera installé dans un dossier différent, qui peut ou non devoir être ajouté au chemin, en fonction du package et de la façon dont il est utilisé (de nombreux packages installent des outils de ligne de commande qui doivent être sur le chemin pour s'exécuter à partir d'un shell) .--user
est préférable d'utiliser root / sudo ou d'exiger une installation administrateur et d'affecter l'environnement Python de chaque utilisateur, sauf dans les cas de packages généraux que l'administrateur souhaite mettre à disposition de tous les utilisateurs par défaut.apt
, plutôt quepip
.Avec des environnements virtuels
venv
commande dans la documentation Python VENV .L'
--user
option dans un environnement venv / virtualenv actif s'installera à l'emplacement python de l'utilisateur local (comme sans environnement virtuel).Les packages sont installés dans l'environnement virtuel par défaut, mais si vous l'utilisez,
--user
cela le forcera à s'installer en dehors des environnements virtuels, dans le répertoire de script python des utilisateurs (sous Windows, c'est actuellementc:\users\<username>\appdata\roaming\python\python37\scripts
pour moi avec Python 3.7).Cependant, vous ne pourrez pas accéder à une installation système ou utilisateur à partir d'un environnement virtuel (même si vous avez utilisé
--user
dans un environnement virtuel).Si vous installez un environnement virtuel avec l'
--system-site-packages
argument, vous aurez accès au dossier de script système pour python. Je pense que cela incluait également le dossier de script python de l'utilisateur, mais je ne suis pas sûr. Cependant, cela peut avoir des conséquences inattendues et ce n'est pas la manière prévue d'utiliser les environnements virtuels.Emplacement du système Python et des dossiers d'installation de l'utilisateur local
Vous pouvez trouver l'emplacement du dossier d'installation utilisateur pour python avec
python -m site --user-base
. Je trouve des informations contradictoires dans les questions et réponses, la documentation et j'utilise réellement cette commande sur mon PC pour savoir quelles sont les valeurs par défaut, mais elles se trouvent sous le répertoire personnel de l'utilisateur (~
raccourci dans * nix, etc:\users\<username>
généralement pour Windows).Autres détails
L'
--user
option n'est pas valide pour toutes les commandes. Par exemple,pip uninstall
il trouvera et désinstallera les packages partout où ils ont été installés (dans le dossier utilisateur, le dossier de l'environnement virtuel, etc.) et l'--user
option n'est pas valide.Choses installées avec
pip install --user
seront installés dans un emplacement local qui ne sera visible que par le compte d'utilisateur actuel et ne nécessitera pas d'accès root (sur * nix) ou d'accès administrateur (sous Windows).L'
--user
option modifie toutes lespip
commandes qui l'acceptent pour voir / fonctionner sur le dossier d'installation de l'utilisateur, donc si vous l'utilisez,pip list --user
elle ne montrera que les packages installés avecpip install --user
.la source
pip install
sans--user
tout à fait. Cela installerait les paquets Python dans des endroits qui devraient vraiment être laissés au gestionnaire de paquets du système (par exempleapt
dans Debian / Ubuntu). Il vaut mieux ne pas jouer avec ça, cela conduit à tant de problèmes. Si un package Python doit être disponible pour tous les utilisateurs, utilisez le gestionnaire de packages du système d'exploitation, mais ne le faites passudo pip install ...
. Une alternative estsudo pip install --target ...
. Sous Windows, c'est moins un problème.~/.local/bin directory
est théoriquement censé être dans votre$PATH
.Selon ces personnes, c'est un bogue de ne pas l'ajouter lors de l'
$PATH
utilisationsystemd
.Cette réponse l' explique plus en détail.
Mais même si votre distribution inclut le
~/.local/bin
répertoire dans le$PATH
, il peut être sous la forme suivante (à l'intérieur~/.profile
):ce qui vous obligerait à vous déconnecter et à vous reconnecter , si le répertoire n'existait pas auparavant.
la source