Otro consejo:
sudo echo $PYTHONPATH:
/home/name/lib/py
No funcionará. Shell lo interpretará así:
1) expanda $PYTHONPATH desde la variable env, por ejemplo:/usr/lib/python
2) ejecutar "sudo echo /usr/lib/python"
La solución en mi caso fue eliminar Defaults !env_reset de sudoers.
Pero tuve que mantener Defaults env_keep += "PYTHONPATH" en sudoers.
De hecho, he añadido Defaults env_reset (que restablece las variables de entorno), pero aún funciona debido a env_keep .
Parece que env_keep y !env_reset entran en conflicto entre sí, pero eso es solo una suposición.
Entonces, todo el proceso:
- añadir
export PYTHONPATH=/your/custom/patha~/.bashrco/etc/bash.bashrc - añadir
PYTHONPATHaDefaults env_keep += "ENV1 ENV2 ..."en el archivo sudoers - quitar
Defaults !env_resetdel archivo sudoers si está presente
Alternativas a la manipulación de PYTHONPATH :
- entorno virtual
- distutils
Lo mismo es cierto para el PATH variable, tampoco se lleva al entorno de superusuario, aunque esté pasando el indicador de conservación del entorno -E .
Estoy usando este comando sudo ahora sin ninguna otra modificación:
sudo -HE env PATH=$PATH PYTHONPATH=$PYTHONPATH ./bin/myscript
Dado que es un enfoque alternativo que funciona (para mí), pensé en compartirlo aquí.