/ / python: os.getenv não retorna nenhum com sudo? - python, linux, variáveis ​​de ambiente

python: os.getenv não retorna nenhum com sudo? - python, linux, variáveis ​​de ambiente

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 № 1

Se 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.