Variável de ambiente não disponível em python

4

Eu tenho um problema bem interessante em relação às variáveis de ambiente, e pesquisar no Google não me mostrou nenhum resultado significativo:

$ echo $BUCKET && python -c "import os; print os.environ['BUCKET']"
mule-uploader-demo
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
    raise KeyError(key)
KeyError: 'BUCKET'

Portanto, eu tenho uma variável de ambiente que está disponível no bash, mas não dentro do python. Como isso pode acontecer e como faço para corrigir isso? Aqui estão alguns detalhes adicionais:

  • A variável de ambiente é definida por meio de um comando source envvars.sh
  • O arquivo envvars.sh contém apenas linhas parecidas com esta: KEY=value
  • Eu reproduzi isso tanto no bash quanto no zsh
  • Se eu faço um export BUCKET=$BUCKET , funciona
por Gabi Purcaru 10.01.2015 / 18:31

1 resposta

3

Isso tem a ver com o escopo da variável no bash. export disponibiliza sua variável para subprocessos, veja por exemplo:

→ export BUCKET=foo 
→ env | grep BUCKET
80:BUCKET=foo
→ PAIL=bar  
→ env | grep PAIL  # no output
→ python -c "import os; print os.environ['BUCKET']"
foo
→ python -c "import os; print os.environ['PAIL']"  
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "...", line 23, in __getitem__
    raise KeyError(key)
KeyError: 'PAIL'
→ CAN=baz python -c "import os; print os.environ['CAN']"
baz

Portanto, em um processo filho PAIL é uma falha.

    
por 10.01.2015 / 18:39