En fonction de votre cas d'utilisation particulier, cela peut ou non résoudre votre problème, mais cela n'a pas encore été mentionné ici. Disons que vous voulez exécuter un script Python qui a été installé dans votre environnement virtuel, et vous devez setuid(0)
c'est-à-dire que vous voulez l'exécuter en tant que super-utilisateur. Disons que votre script s'appelle myscript.py
alors, vous pouvez le faire comme ça :
(.venv) $ sudo -E env PATH=$PATH ./myscript.py
Explication
(.venv) $
est l'invite du Shell, vous n'avez pas besoin de le taper, il montre simplement que vous utilisez actuellement un environnement virtuel, et que vous n'êtes pas un utilisateur privilégié.
sudo -E
dira sudo
que lorsqu'il démarre un processus, il doit copier les variables d'environnement de votre environnement actuel Shell. Donc, si vous avez des variables supplémentaires définies dans la section .venv/bin/activate
script, ils devraient rester dans le coin pendant que vous êtes root
.
env PATH=$PATH
lors de l'utilisation de sudo -E
toutes les variables d'environnement ne sont pas préservées, en particulier, et c'est le plus important, les variables de type PATH
peuvent être supprimés. Les spécificités de ce comportement dépendront de votre fichier sudoers. Cependant, cela contournera tout ce qui est écrit dans le fichier sudoers, car cela copiera le fichier PATH
explicitement dans l'environnement sudo
crée pour le nouveau processus. Ceci est important parce que lorsque votre système résout le commentaire shebang dans votre myscript.py
il cherchera dans le PATH
et le premier répertoire qui correspond aux exigences de l'interpréteur sera utilisé. venv
d'autre part, configure l'environnement Shell de telle sorte que le répertoire contenant le lien symbolique vers l'interpréteur Python choisi apparaisse en premier, amenant ainsi le système à localiser le Python désiré avant tout autre Python sur le chemin du système.