Eu defini a variável de ambiente LIBRARY_PATH
dentro /etc/bash.bashrc
adicionando export LIBRARY_PATH=/usr/local/cuda/lib64:$LIBRARY_PATH
no fim.
Quando tento obter a variável env de python:
ipython
import os
print os.getenv("LIBRARY_PATH")
Tudo funciona bem, imprime /usr/local/cuda/lib64:
.
MAS quando invoco o ipython com sudo
:
sudo ipython
import os
pront os.getenv("LIBRARY_PATH")
Eu não recebo nada. Eu acho que isso é sobre variáveis env em todos os usuários, mas quais são os ditails? eu coloco LIBRARY_PATH
dentro /etc/bash.bashrc
que é dito ser o "arquivo bashrc do sistema".
Então, como posso obter a variável de env correta com o sudo em python?
Respostas:
1 para resposta № 1Se você quiser sudo
Para passar por variáveis de ambiente (o que geralmente é considerado um risco de segurança), use sudo -E
.
Note que é bash
que executa os comandos nos arquivos bashrc. ipython
não é bash
, obviamente, e sudo
não inicia um processo de shell, muito menos um processo bash, apenas para executar o comando que você está solicitando para ser executado. Portanto, nenhum dos seus arquivos bashrc será executado pelo sudo
comando ou no sudo
subprocesso. Claro, você pode dizer sudo
para executar um processo bash:
sudo bash -c ipython
Contudo, bash
não executa arquivos de inicialização se detectar que está sendo executado em um processo sudo.
Para mais informações sobre como sudo
limpa o ambiente, digite man 5 sudoers
e pule para baixo Command environment
seção.
0 para resposta № 2
Se você definir a variável de ambiente em /root/.bash_profile, provavelmente obterá o comportamento desejado ao usar o sudo.