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 chown
ed 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?
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
.
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é
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é.
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
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
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/