Autre conseil :
sudo echo $PYTHONPATH:
/home/name/lib/py
Cela ne fonctionnera pas. Shell l'interprétera comme ceci :
1) développez $PYTHONPATH à partir de la variable env par exemple :/usr/lib/python
2) exécutez "sudo echo /usr/lib/python"
Le correctif dans mon cas consistait à supprimer Defaults !env_reset de sudoers.
Mais, je devais garder Defaults env_keep += "PYTHONPATH" dans les sudoers.
J'ai en fait ajouté Defaults env_reset (qui réinitialise les variables d'environnement), mais cela fonctionne toujours à cause de env_keep .
Il semble que env_keep et !env_reset sont en conflit les uns avec les autres, mais ce n'est qu'une supposition.
Donc, tout le processus :
- ajouter
export PYTHONPATH=/your/custom/pathà~/.bashrcou/etc/bash.bashrc - ajouter
PYTHONPATHàDefaults env_keep += "ENV1 ENV2 ..."dans le fichier sudoers - supprimer
Defaults !env_resetdu fichier sudoers si présent
Alternatives à la manipulation de PYTHONPATH :
- environnement virtuel
- distutils
Il en est de même pour le PATH variable, elle n'est pas non plus transportée dans l'environnement du super utilisateur, même si vous passez l'indicateur de préservation de l'environnement -E .
J'utilise cette commande sudo maintenant sans aucune autre modification :
sudo -HE env PATH=$PATH PYTHONPATH=$PYTHONPATH ./bin/myscript
Comme c'est une approche alternative qui fonctionne (pour moi), j'ai pensé partager ici.