Environment variable not available in python

5,446

This has to do with the variable scope in bash. export makes your variable available to subprocesses, see for example:

→ 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

so in a child process PAIL is a fail.

Share:
5,446

Related videos on Youtube

Gabi Purcaru
Author by

Gabi Purcaru

Updated on September 18, 2022

Comments

  • Gabi Purcaru
    Gabi Purcaru over 1 year

    I have a pretty interesting problem regarding environment variables, and googling around didn't show me any meaningful results:

    $ 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'
    

    So I have an environment variable that is available in bash but not inside python. How can this happen and how do I fix it? Here are some additional details:

    • The environment variable is set through a source envvars.sh command
    • The envvars.sh file contains only lines that look like this: KEY=value
    • I've reproduced this in both bash and zsh
    • If I do an export BUCKET=$BUCKET, it works
  • Gabi Purcaru
    Gabi Purcaru over 9 years
    Yeah, I thought that using source [filename] would export the variables automatically, but apparently this is not the case. Thanks!