Estoy tratando de hacer un entorno de Python separado del sistema (usando virtualenv) en un directorio que no está en / home, porque necesito usarlo para construir otro software que tenga que ser accesible para múltiples usuarios. Puedo crear y activar virtualenv bien, pero cuando hago sudoalgún comando (por ejemplo, para hacer o compilar otro software), es el sistema python el que se usa (puedo decirlo debido a los módulos disponibles).
Dado que en Ubuntu no es bueno usar el usuario root , ¿hay alguna manera de decir sudoque use un virtualenv? ¿O tal vez este no es el enfoque correcto, y debería hacer una instalación de Python completamente nueva?
Estoy usando la versión de 64 bits de Ubuntu 12.04 (y Python 2.7).

Respuestas:
El problema es casi seguro que cuando ejecuta
sudo, las variables de entorno virtualenv, los alias, las funciones, etc. no se transfieren.La solución sería ejecutar explícitamente el ejecutable Python del entorno virtual con
sudo. Por ejemplo, si su virtualenv es ./AwesomeProject, entonces podría ejecutarsudo ./AwesomeProject/bin/python <script>el script con virtualenv con privilegios de root.fuente
#!<virtualenv_dir>/bin/python.Simplemente me topé con esto y para otros que pueden encontrar el mismo problema, Ken tiene razón en que las variables env no se están transfiriendo. La solución que utilicé fue agregar las siguientes líneas a mi script. Esto tiene el beneficio adicional de cargar siempre el entorno virtual directamente desde el script. (Lo que significa que puede usar el script con crontab o launchd sin ninguna otra solución).
Más información aquí: https://virtualenv.pypa.io/en/latest/userguide.html#using-virtualenv-without-bin-python
fuente
A veces necesita actualizar $ PATH porque el script ejecuta otros programas. Por ejemplo, pypi-install necesita py2dsc-deb en la RUTA. Este comando funciona:
sudo sh -c ". venv/bin/activate ; pypi-install $PACKAGE"fuente