web-dev-qa-db-fra.com

Comment éviter "Autorisation refusée" lors de l'utilisation de pip avec virtualenv

J'essaie de déployer un paquet Python avec pip dans un environnement virtuel sur une machine Ubuntu, mais je rencontre un problème lié à une autorisation. 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': Autorisation refusée

Je ne peux pas Sudo, car il installera le paquet globalement et non dans l'environnement virtuel. I chowned site-packages; ls affiche uniquement les répertoires liés à easy_install, pip et setuptools et rien n’est lié à Markdown.

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

73
Arseni Mourzenko

Des problèmes de permission virtualenv peuvent survenir lorsque vous créez la virtualenv en tant que Sudo et que vous agissez ensuite sans Sudo dans la virtualenv.

Comme indiqué dans le commentaire de votre question, la solution consiste ici à créer la virtualenv sans Sudo pour pouvoir travailler (en particulier écrire) sans Sudo.

80
sebastian_oe

Solution:

Si vous avez créé virtualenv en tant que root, exécutez la commande suivante:

Sudo chown -R your_username:your_username path/to/virtuaelenv/

Cela va probablement résoudre votre problème.

À votre santé

72
Vingtoft

Je n'ai pas créé mon virtualenv en utilisant Sudo. La réponse de Sebastian ne s’applique donc 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 Jan 15:17 README.md
drwxr-xr-x   6 root     staff   204  6 Jan 14:36 utils.Egg-info
-rw-r--r--   1 macuser  staff    31  6 Jan 15:09 requirements.txt

Comme vous pouvez le constater, utils.Egg-info appartient à root et non à macuser. C'est pourquoi il me donnait l'erreur permission denied. J'ai également dû supprimer /Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.Egg-link car il a été créé par root. J'ai refait pip install -e . après avoir enlevé ceux-ci, et cela a fonctionné.

4
AliBZ

Dans mon cas, j'utilisais mkvirtualenv, mais je ne l'avais pas dit, j'allais utiliser python3. J'ai eu cette erreur:

mkvirtualenv hug
pip3 install hug -U

....
error: could not create '/usr/lib/python3.4/site-packages': Permission denied

Cela a fonctionné après avoir spécifié python3:

mkvirtualenv --python=/usr/bin/python3 hug
pip3 install hug -U
3
nealmcb

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

Essayez-le avec: 

$(your venv path) . bin/activate

Et puis utilisez pip -r Requirements.txt sur votre dossier principal

0
jmrueda

Lors de la création de virtualenv, si vous utilisez Sudo, le répertoire est créé avec les privilèges root. Ainsi, lorsque vous tentez d’installer un paquet avec un utilisateur non-Sudo, vous n’avez pas le droit d’y installer. sans Sudo.

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

cp -r /lib/python/site-packages/* virtualenv/lib/python/site-packages/
0
Vkreddy Komatireddy