Estou tentando executar uma instância python do Pipenv como root. Quando não executado como root:
(myenv) $ python script.py
o python Pipenv é usado corretamente. No entanto, quando executado como root com sudo
:
(myenv) $ sudo python script.py
o python padrão do sistema /usr/bin/python
é usado em vez disso. Depois de alguma pesquisa, encontrei a -E
opção para sudo. No entanto, com
(myenv) $ sudo -E python script.py
ele ainda usa /usr/bin/python
, embora sudo -E echo $PATH
dê o mesmo que echo $PATH
, então a -E
opção funciona bem; no entanto, sudo -E which python
continua a dar /usr/bin/python
! Não é um problema de permissões ou acesso porque o caminho completo para o python Pipenv funciona bem. Por que o binário errado está sendo usado, embora $PATH
esteja definido corretamente?
Ok, aqui está o problema. Quando eu estava solucionando problemas, queria encontrar o valor de $PATH dentro do sudo. No entanto, com
sudo -E echo $PATH
, meu shell de usuário (não-sudo) estava expandindo-o automaticamente, então o sudo acabou de verTentar
sudo -E env
nos conta a história real:então, na verdade,
sudo -E
não estava passando$PATH
. Para corrigir isso, você pode ver esta resposta em uma pergunta semelhante. Essencialmente, você apenas adicionapara o seu arquivo sudoers com
visudo
.