J'essaie de créer un environnement python distinct de celui du système (à l'aide de virtualenv) dans un répertoire ne se trouvant pas sous / home, car je dois l'utiliser pour créer un autre logiciel devant être accessible à plusieurs utilisateurs. Je peux très bien créer et activer virtualenv, mais lorsque je sudo
commande (par exemple, de créer ou de compiler un autre logiciel), c'est le python système qui est utilisé (je peux dire en raison des modules disponibles).
Étant donné que sur Ubuntu, l’utilisation de l’ utilisateur root n’est pas une bonne chose , existe-t-il un moyen de décider sudo
d’utiliser virtualenv? Ou peut-être que ce n'est pas la bonne approche et que je devrais faire une toute nouvelle installation de python?
J'utilise la version 64 bits d'Ubuntu 12.04 (et python 2.7).
Réponses:
Le problème est presque certainement que lorsque vous exécutez
sudo
, les variables d'environnement, les alias, les fonctions, etc. de virtualenv ne sont pas reportés.La solution serait d'exécuter explicitement le fichier exécutable Python de l'environnement virtuel avec
sudo
. Par exemple, si votre virtualenv est ./AwesomeProject, vous pouvezsudo ./AwesomeProject/bin/python <script>
utiliser le script avec virtualenv avec les privilèges root.la source
#!<virtualenv_dir>/bin/python
.Je suis tombé par hasard sur cette situation et pour les autres qui pourraient trouver le même problème, Ken a raison de dire que les variables env ne sont pas reportées. La solution que j'ai utilisée consistait à ajouter les lignes suivantes à mon script. Cela présente l'avantage supplémentaire de toujours charger l'environnement virtuel directement à partir du script. (Cela signifie que vous pouvez utiliser le script avec crontab ou launchd sans autre solution.)
Plus de fond ici: https://virtualenv.pypa.io/en/latest/userguide.html#using-virtualenv-without-bin-python
la source
Parfois, vous avez besoin de mettre à jour $ PATH car le script exécute d'autres programmes. Par exemple, pypi-install a besoin de py2dsc-deb dans le PATH. Cette commande fonctionne:
sudo sh -c ". venv/bin/activate ; pypi-install $PACKAGE"
la source