111 votes

Comment éviter "Permission denied" lors de l'utilisation de pip avec virtualenv

Je tente de déployer un package Python avec pip dans un environnement virtuel sur une machine Ubuntu, mais je rencontre un problème lié aux permissions. Par exemple :

(TestVirtualEnv)test@testServer:~$ pip install markdown2

se termine par :

erreur : impossible de créer '/home/test/virtualenvs/TestVirtualEnv/lib/python3.3/site-packages/markdown2.py' : Permission refusée

Je ne peux pas utiliser sudo, car cela installera le package de manière globale, et non pas dans l'environnement virtuel. J'ai utilisé chown sur site-packages ; ls montre seulement des répertoires liés à easy_install, pip et setuptools, et rien lié à Markdown.

Comment déployer un package dans un environnement virtuel avec pip sans rencontrer d'erreurs liées aux permissions ?

5voto

AliBZ Points 1254

Je n'ai pas créé mon virtualenv en utilisant sudo. Donc la réponse de Sebastian ne s'appliquait pas à moi. Mon projet s'appelle utils. J'ai vérifié le répertoire utils et j'ai vu ceci :

-rw-r--r--   1 macuser  staff   983  6 janv. 15:17 README.md
drwxr-xr-x   6 root     staff   204  6 janv. 14:36 utils.egg-info
-rw-r--r--   1 macuser  staff    31  6 janv. 15:09 requirements.txt

Comme vous pouvez le voir, utils.egg-info est détenu par root et non par macuser. C'est pourquoi il me donnait une erreur de permission denied. J'ai aussi dû supprimer /Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.egg-link car il a été créé par root également. J'ai refait pip install -e . après avoir supprimé ces fichiers, et ça a fonctionné.

1voto

jmrueda Points 366

Vous n'avez pas activé l'environnement virtuel avant d'utiliser pip.

Essayez avec :

$(votre chemin d'env) . bin/activate

Et ensuite utilisez pip -r requirements.txt dans votre dossier principal

1voto

mrkanuke Points 45

J'ai eu le même problème. J'ai créé *et activé un venv en tant qu'utilisateur régulier dans Git Bash à l'intérieur de VS Code fonctionnant sous Windows 11 et j'ai obtenu une erreur "permission refusée" en essayant d'exécuter pip. Je ne pouvais pas du tout utiliser sudo (ordinateur portable d'entreprise).

Ma solution était la suivante :

Créez votre venv comme d'habitude (en tant qu'utilisateur non root) :

python -m venv 

Activez votre venv :

source venv/Scripts/activate

Ensuite, en supposant que vous utilisez un fichier requirements.txt, exécutez :

python -m pip install -r requirements.txt

La clé est le "python -m"

Vous devrez peut-être mettre à jour votre pip si un paquet échoue à s'installer correctement. Essayez :

python -m pip install --upgrade pip

puis réessayez d'installer vos exigences.


Si vous souhaitez confirmer qu'il s'agit de la même erreur que la solution ci-dessus, vous pouvez recréer l'erreur en :

*après avoir activé votre venv, exécutez :

python --version

ou

which python

et les deux devraient indiquer que vous utilisez le python dans votre venv (encore une fois, en supposant que vous l'avez activé)

Ensuite, exécutez :

pip --version

et vous devriez voir votre erreur de permission refusée.

$ pip --version

bash: \venv/Scripts/pip: Permission denied

Ensuite, exécutez

python -m pip --version

vous montrera la version correcte de pip du venv et le chemin à l'intérieur de votre venv.

0voto

Vkreddy Points 904

Lors de la création de virtualenv, si vous utilisez sudo, le répertoire est créé avec des privilèges root. Donc, lorsque vous essayez d'installer un package avec un utilisateur non-sudo, vous n'aurez pas la permission de l'installer. Donc, créez toujours virtualenv sans sudo et installez sans sudo.

Vous pouvez également copier les packages installés sur le python global vers le virtualenv.

cp -r /lib/python/site-packages/* virtualenv/lib/python/site-packages/

0voto

Sam Mason Points 1389

J'ai également eu cela se produire (par accident) après avoir créé un nouvel environnement virtuel tout en étant dans un environnement virtuel existant. Une manière simple de diagnostiquer cela serait de voir où le python est lié en faisant :

ls -l venv/bin/python

et assurez-vous qu'il pointe vers le binaire Python approprié. Pour la plupart des systèmes, il s'agira de /usr/bin/python ou /usr/bin/python3. alors que s'il pointe vers un environnement virtuel existant, cela ressemblera à /home/votreutilisateur/repertoirequelconque/bin/python. si c'est le cas, je suggère de recréer l'environnement virtuel en vous assurant de ne pas être "à l'intérieur" d'un environnement virtuel existant (c'est-à-dire exécutez deactivate)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X