Komenda linux została znaleziona, ale nie znaleziono podczas używania sudo

11

Próbuję uruchomić instalację python3 w następujący sposób:

pip3 install django

Dostaję błąd:

PermissionError: [Errno 13] Odmowa dostępu: „/usr/local/lib/python3.6/site-packages/pytz”

Następnie próbuję:

sudo pip3 install django

Dostaję błąd:

sudo: pip3: nie znaleziono polecenia

Oto jak wygląda moja $ PATH:

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

Jak mogę uzyskać dostęp sudo do pip3?

Petey
źródło

Odpowiedzi:

9

Sudo PATHze względów bezpieczeństwa nie używa tego samego, co obecny użytkownik. W /etc/sudoersistnieje opcja secure_path, która określa ścieżkę używaną podczas uruchamiania poleceń z sudo. Mój wygląda następująco:

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

Ze strony 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.

pip3Polecenie nie jest prawdopodobnie w ścieżce określonej przez sudoerspliku. Możesz dodać ścieżkę do polecenia secure_pathlub podać pełną ścieżkę do pip3polecenia w następujący sposób:

sudo /path/to/pip3 install django
EvilTorbalan
źródło
1

Możliwe, że sudo nie zachowuje zmiennej $ PATH po użyciu. Spróbuj użyć pełnej ścieżki do pliku binarnego pip3 w poleceniu, np sudo /path/to/pip3 install django. Jeśli nie masz pewności co do pełnej ścieżki, zrób to which pip3.

Safado
źródło
które wyjścia pip3: / usr / local / bin / pip3. Zmienna $ PATH również wygląda dobrze: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2- użytkownik / bin
petey
robi sudo echo $PATHprodukować coś innego? Czy wypróbowałeś polecenie z pełną ścieżką do pip3? Jakaś różnica w wynikach?
Safado
sudo wyświetla to samo: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
petey
0

Zawsze możesz zrobić:

sudo env "PATH=$PATH" pip3 install django

Jak wspomniano w tej odpowiedzi .

Alexander Tolkachev
źródło
0

Wydałem instalację django w ten sposób:

pip3 install --user django

To rozwiązało problem.

Petey
źródło