1

I followed approach in this thread. I can easily set env variable in jupyter hub using the %env VAR = 5. However, when I try to print out this variable in the terminal I get only a blank line, as if the variable did not exist at all. Is it somehow possible to be able to print in terminal the env var defined in the notebook?

user430953
  • 191
  • 2
  • 19

3 Answers3

2

Setting environment variables from the notebook results in these variables being available only from that notebook.

%env VAR=TEST
import os
print(os.environ["VAR"])
...
>>> TEST

If you want to persist the variable, you need to put it either in the kernel.json file, or in systemd service file for jupyterhub, or in something like ~/.bashrc.

Monory
  • 103
  • 1
  • 8
0

JupyterHub has a jupyterhub_config.py file (e.g. located in /etc/jupyterhub/jupyterhub_config.py) which can be used to control various aspects of the hub and the notebook environment.

In order to make a specific environment variable available to all notebooks on the hub, add the following lines to it:

c.Spawner.environment = {
  'VAR': 'Test'
}

and restart the JupyterHub service (something like sudo service jupyterhub restart).

P.S. If you would just like to forward an environment variable from the user's environment, there is also

c.Spawner.env_keep = ['VAR']
leopold.talirz
  • 640
  • 7
  • 19
0

Following from @leopold.talirz's answer, for those wanting to modify an environment variable without overwriting it (i.e. append a path to the PATH variable), I found you can do something like the following,

import os
original_path = os.environ['PATH']
c.Spawner.environment = {
    'PATH': '/path/to/foo:{}'.format(original_path)
}

NOTE: In my case, I'm working with The Littlest JupyterHub, so I put the above in /opt/tljh/config/jupyterhub_config.d/environment.py.

JDQ
  • 443
  • 7
  • 11