Search code examples
pythonmoduleenvironment-variablesenvironment-modules

Loading environment modules within a python script


Is there a way for a python script to load and use environment modules? os.system('module load xxx') doesn't work since it executes them in a subshell (at least, I think that's what's happening).


Solution

  • I know this question's kind of old but it's still relevant enough that I was looking for the answer, so I'm posting what I found that works as well:

    At least in the 3.2.9+ sources, you can include the python "init" file to get a python function version of module:

    >>> exec(open('/usr/local/Modules/default/init/python.py').read())
    >>> module('list')
    No Modulefiles Currently Loaded.
    >>> module('load','foo')
    >>> module('list')
    Currently Loaded Modulefiles:
      1) foo/1.0
    

    I've been told earlier versions can do the same without the .py extension, but that's second hand, so ymmv.

    Alternative "init" file location (from comment by @lib): /usr/share/Modules/init/python.py

    To use with Python 3, version 4.0 or later of Environment Modules is required, as that is the first version to have a bug-free Python3-compliant version of the Python init file.