web-dev-qa-db-fra.com

"Sudo pip" diffère de la normale "pip"

Quand j'exécute

which pip3

il pointe vers

/usr/.../anaconda3/bin/pip3

Cependant, quand je cours

Sudo which pip3

le résultat est

/usr/bin/pip3

D'où vient ce problème et comment y parvenir Sudo pip pointe également vers /usr/.../anaconda3/bin/pip3?

4
PKuhn

Sudo nettoie l'environnement avant d'exécuter une commande. Ainsi, si la valeur de la directive secure_path est définie, elle sera utilisée en tant que PATH pour les commandes Sudo et non pour le nom actuel PATH.

Dans mon système:

% Sudo grep -E 'secure_path' /etc/sudoers
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Donc j'ai:

% echo $PATH
/home/foobar/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

% Sudo bash -c 'echo $PATH' 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Que pouvez-vous faire pour conserver votre chemin actuel ou pour ajouter /usr/.../anaconda3/bin à Sudo 's PATH:

  • Passez PATH dans l'environnement de la commande which:

    Sudo PATH="$PATH" which pip3
    

    Tout PATH souhaité peut également être défini.

  • Conservez l'environnement actuel pendant l'exécution de Sudo en:

    Sudo -E which pip3
    
  • Désactivez la valeur secure_path en plaçant un # devant ou supprimez la ligne pour conserver le PATH actuel:

    # Defaults        secure_path="....."   
    

    Au lieu de cela, vous pouvez également modifier le secure_path pour simplement y ajouter /usr/.../anaconda3/bin, au début.

  • Ajoutez PATH à la directive env_keep pour conserver le PATH dans l’environnement fourni Sudo:

    Defaults        env_keep += "PATH"
    
5
heemayl