commande linux trouvée mais non trouvée lors de l'utilisation de sudo

11

J'essaie d'exécuter une installation python3 comme ceci:

pip3 install django

Je reçois l'erreur:

PermissionError: [Errno 13] Autorisation refusée: '/usr/local/lib/python3.6/site-packages/pytz'

J'essaye ensuite:

sudo pip3 install django

Je reçois l'erreur:

sudo: pip3: commande introuvable

Voici à quoi ressemble mon $ PATH:

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin

Comment puis-je obtenir l'accès sudo à pip3?

petey
la source

Réponses:

9

Sudo n'utilise pas la même chose PATHque votre utilisateur actuel pour des raisons de sécurité. Il /etc/sudoersy a une option secure_pathqui spécifie le chemin utilisé lors de l'exécution des commandes avec sudo. Le mien ressemble à ceci:

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

Depuis la page de manuel sudo:

 secure_path   Path used for every command run from sudo.  If you don't trust the people running sudo to have a sane PATH environment
               variable you may want to use this.  Another use is if you want to have the “root path” be separate from the “user path”.
               Users in the group specified by the exempt_group option are not affected by secure_path.  This option is not set by
               default.

La pip3commande n'est probablement pas dans le chemin défini par le sudoersfichier. Vous pouvez soit ajouter le chemin d'accès à la, secure_pathsoit fournir le chemin d'accès complet à la pip3commande comme ceci:

sudo /path/to/pip3 install django
EvilTorbalan
la source
1

Il est possible que sudo ne conserve pas votre variable $ PATH lors de son utilisation. Essayez d' utiliser le chemin complet vers le binaire PIP3 dans la commande, par exemple: sudo /path/to/pip3 install django. Si vous n'êtes pas sûr du chemin complet, faites-le which pip3.

Safado
la source
quelle sortie pip3: / usr / local / bin / pip3. La variable $ PATH semble également bonne: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2- user / bin
petey
ne sudo echo $PATHrien produit de différent? Avez-vous essayé la commande avec le chemin d'accès complet à pip3? Des différences de résultats?
Safado
sudo affiche la même chose: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
petey
0

Vous pouvez toujours faire:

sudo env "PATH=$PATH" pip3 install django

Comme il l'a mentionné dans cette réponse .

Alexander Tolkachev
la source
0

J'ai lancé l'installation de django de cette façon:

pip3 install --user django

Cela a résolu le problème.

petey
la source