У меня довольно интересная проблема с переменными окружения, и поиск в Google не дал мне значимых результатов:
$ 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'
Итак, у меня есть переменная среды, которая доступна в bash, но не внутри python. Как это может случиться и как это исправить? Вот некоторые дополнительные сведения:
source envvars.sh
командаenvvars.sh
файл содержит только строки, которые выглядят так: KEY=value
export BUCKET=$BUCKET
, оно работаетЭто связано с областью видимости переменной в bash. export
делает вашу переменную доступной для подпроцессов, см., например:
→ 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
так что в дочернем процессе PAIL
это провал.