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
à~/.bashrc
ou/etc/bash.bashrc
- ajouter
PYTHONPATH
àDefaults env_keep += "ENV1 ENV2 ..."
dans le fichier sudoers - supprimer
Defaults !env_reset
du 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.