pythonpersistenceenvironment-variables

Why can't environmental variables set in python persist?


I was hoping to write a python script to create some appropriate environmental variables by running the script in whatever directory I'll be executing some simulation code, and I've read that I can't write a script to make these env vars persist in the mac os terminal. So two things:

Is this true?

and

It seems like it would be a useful things to do; why isn't it possible in general?


Solution

  • You can't do it from python, but some clever bash tricks can do something similar. The basic reasoning is this: environment variables exist in a per-process memory space. When a new process is created with fork() it inherits its parent's environment variables. When you set an environment variable in your shell (e.g. bash) like this:

    export VAR="foo"
    

    What you're doing is telling bash to set the variable VAR in its process space to "foo". When you run a program, bash uses fork() and then exec() to run the program, so anything you run from bash inherits the bash environment variables.

    Now, suppose you want to create a bash command that sets some environment variable DATA with content from a file in your current directory called ".data". First, you need to have a command to get the data out of the file:

    cat .data
    

    That prints the data. Now, we want to create a bash command to set that data in an environment variable:

    export DATA=`cat .data`
    

    That command takes the contents of .data and puts it in the environment variable DATA. Now, if you put that inside an alias command, you have a bash command that sets your environment variable:

    alias set-data="export DATA=`cat .data`"
    

    You can put that alias command inside the .bashrc or .bash_profile files in your home directory to have that command available in any new bash shell you start.