Loading environment modules within a python script

后端 未结 4 1375
一个人的身影
一个人的身影 2020-12-05 07:13

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 le

相关标签:
4条回答
  • 2020-12-05 07:46

    Not directly, but here's one possible workaround, depending on your environment. Assuming you can preface your system command with ENVVAR=value, you can do something along these lines:

    import os
    os.environ['EDITOR'] = 'vi'
    cmd = "EDITOR=%(EDITOR)s $EDITOR" % os.environ
    os.system(cmd)
    

    The code assigns vi to your EDITOR environment variable, then passes it on the command line and runs the command, which (in this case) is EDITOR.

    0 讨论(0)
  • 2020-12-05 07:50

    One of our admins was able to solve the problem for me using os.popen() calls to modulecmd:

    cmd = os.popen('/path/to/modulecmd python load my-module')
    exec(cmd)
    
    0 讨论(0)
  • 2020-12-05 08:03

    While the accepted solution works, I found it to be easier to write:

    import sys
    sys.path.insert(0, '/path/to/environment/modules')
    # Environment modules become available by loading python.py (the name choice could be better here)
    import python as mod
    
    # ...
    mod.module('use', '/some/dir')
    mod.module('load', 'program/1.2.3')
    

    This looks more pythonic to me and also it allows IDEs to offer auto-completion etc.

    0 讨论(0)
  • 2020-12-05 08:09

    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.

    0 讨论(0)
提交回复
热议问题