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/path
a~/.bashrc
o/etc/bash.bashrc
- añadir
PYTHONPATH
aDefaults env_keep += "ENV1 ENV2 ..."
en el archivo sudoers - quitar
Defaults !env_reset
del 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í.