Загрузка модулей среды в python script

Есть ли способ для python script загружать и использовать модули среды? os.system('module load xxx') не работает, так как он выполняет их в подоболочке (по крайней мере, я думаю, что происходит).

Ответы

Ответ 1

Я знаю этот вопрос довольно старый, но он все еще достаточно актуален, чтобы я искал ответ, поэтому я публикую то, что я нашел, что также работает:

По крайней мере, в источниках 3.2. 9+ вы можете включить файл init "python", чтобы получить версию модуля с функцией python:

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

Мне говорили, что более ранние версии могут делать то же самое без расширения .py, но это вторая рука, так что ymmv.

Альтернативное расположение файла инициализации (из комментария @lib): /usr/share/Modules/init/python.py

Для использования с Python 3 требуется версия 4.0 или более поздней версии модулей среды, так как это первая версия, имеющая безошибочную Python3-совместимую версию файла инициализации Python.

Ответ 2

Один из наших администраторов смог решить проблему для меня, используя os.popen() вызовы modulecmd:

cmd = os.popen('/path/to/modulecmd python load my-module')
exec(cmd)

Ответ 3

Не напрямую, а вот одно возможное обходное решение, в зависимости от вашей среды. Предполагая, что вы можете ввести команду системы с помощью ENVVAR=value, вы можете сделать что-то в этом направлении:

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

Код присваивает переменной vi переменную окружения EDITOR, затем передает ее в командной строке и запускает команду, которая (в данном случае) является EDITOR.