comando linux encontrado mas não encontrado ao usar o sudo

11

Estou tentando executar uma instalação python3 como esta:

pip3 install django

Eu recebo o erro:

PermissionError: [Erro 13] Permissão negada: '/usr/local/lib/python3.6/site-packages/pytz'

Então eu tento:

sudo pip3 install django

Eu recebo o erro:

sudo: pip3: comando não encontrado

Aqui está a aparência do meu $ PATH:

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

Como posso obter acesso do sudo ao pip3?

petey
fonte

Respostas:

9

O Sudo não está usando o mesmo PATHusuário atual por motivos de segurança. No /etc/sudoersexiste uma opção secure_pathque especifica a caminho usado durante a execução de comandos com sudo. O meu fica assim:

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

Na página de manual do 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.

O pip3comando provavelmente não está no caminho definido pelo sudoersarquivo. Você pode adicionar o caminho secure_pathou fornecer o caminho completo para o pip3comando da seguinte maneira:

sudo /path/to/pip3 install django
EvilTorbalan
fonte
1

É possível que o sudo não esteja preservando sua variável $ PATH após o uso. Tente usar o caminho completo para o binário PIP3 no comando, por exemplo: sudo /path/to/pip3 install django. Se você não tiver certeza do caminho completo, faça which pip3.

Safado
fonte
qual pip3 produz: / usr / local / bin / pip3. A variável $ PATH também parece boa: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2- user / bin
petey
faz sudo echo $PATHproduzir qualquer coisa diferente? Você tentou o comando com o caminho completo para o pip3? Alguma diferença nos resultados?
Safado 02/01
O sudo produz o mesmo: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
petey 02/01
0

Você sempre pode fazer:

sudo env "PATH=$PATH" pip3 install django

Como mencionado nesta resposta .

Alexander Tolkachev
fonte
0

Emiti a instalação do django desta maneira:

pip3 install --user django

Isso resolveu o problema.

petey
fonte