Après avoir essayé d'installer virtualenv avec pip
$ pip install virtualenv
J'ai une permission refusée erreur
IOError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/virtualenv.py'
J'ai donc utilisé Sudo pour installer virtualenv
$ Sudo pip install virtualenv
Mais alors un avertissement est apparu:
Le répertoire '/ Users/petertao/Library/Caches/pip/http' ou son répertoire parent n'appartient pas à l'utilisateur actuel et le cache a été désactivé. Veuillez vérifier les autorisations et le propriétaire de ce répertoire. Si vous exécutez pip avec Sudo, vous voudrez peut-être le drapeau -H de Sudo.
Le répertoire '/ Users/petertao/Library/Caches/pip' ou son répertoire parent n'appartient pas à l'utilisateur actuel et la mise en cache des roues a été désactivée. vérifiez les autorisations et le propriétaire de ce répertoire. Si vous exécutez pip avec Sudo, vous voudrez peut-être le drapeau -H de Sudo.
Que fait le drapeau -H de Sudo?
man Sudo
(le texte exact peut varier, mais il sera similaire):
-H
L'option -H (HOME) demande à la stratégie de sécurité de définir la variable d'environnement HOME sur le répertoire de base de l'utilisateur cible (racine par défaut), comme indiqué par la base de données de mots de passe. Selon la stratégie, il peut s'agir du comportement par défaut.
Alors, pourquoi est-ce même une option? Normalement, l'utilisation de "Sudo" ne modifie pas la variable d'environnement $ HOME.
par exemple:
echo $HOME $USER
/home/testuser testuser
Sudo bash -c 'echo $HOME $USER'
/home/testuser root
Sudo -H bash -c 'echo $HOME $USER'
/home/root root
Vous pouvez voir qu'un Sudo normal change l'utilisateur que je suis de "testuser" en "root", mais pas ce que $ HOME est défini, alors qu'un Sudo -H modifie également la variable de "mon" répertoire de base pour le répertoire de base de root.
pip vous avertit qu'il a été exécuté en tant qu'utilisateur root et qu'il voulait modifier les éléments de $ HOME, qui était défini sur '/ Users/petertao', qui n'appartient pas à root (probablement l'utilisateur "petertao"). l'avertissement indique que pip utilise $ HOME pour mettre en cache les fichiers, mais qu'il a désactivé sa propre mise en cache en raison de la différence de propriétaire du dossier.
Bien sûr, lors de l'exécution en tant que root, pip peut modifier '/ Users/petertao/Library/Caches/pip' car root est (presque) tout puissant. Cela peut devenir gênant par la suite, car un programme exécuté sans racine ne pourrait plus écraser ou modifier ces fichiers. Au lieu de cela, pip refuse d'écrire dans un répertoire appartenant à un autre utilisateur.