Python 全局导入模块

Python 全局导入模块,python,import,Python,Import,我想为用户提供一个python脚本,该脚本将为他们导入一些模块,然后将导入的模块放到python解释器中,这些模块在该级别可用。我有一些我认为可能有效的代码,但它似乎没有: module_list = ['module_a','module_b'] # Import our common modules for module in module_list: try: print "Importing: {0}".format(module) exec("import {0}".

我想为用户提供一个python脚本,该脚本将为他们导入一些模块,然后将导入的模块放到python解释器中,这些模块在该级别可用。我有一些我认为可能有效的代码,但它似乎没有:

module_list = ['module_a','module_b']

# Import our common modules
for module in module_list:
try:
    print "Importing: {0}".format(module)
    exec("import {0}".format(module))
except:
    print "FYI we failed importing {0}. It will not be available for you to use".format(module)              
因此,当脚本完成时,它将转到python模块,用户可以在该模块中执行以下操作:

>>> module_a.run()

您可以使用并传递包含控制台将在其中运行的本地上下文的
locals
字典。通过将模块存储在其中,您可以轻松地将它们提供给交互式shell。

如果我是您,我不会这样做。。但是

import imp

module_list = ['module_a','module_b']

for name in module_list:
    try:
        module_info = imp.find_module(name)
        globals()[name] = imp.load_module(name, *module_info)
    except:
        "Import error: %s" %name
保存上述代码文件,例如
imptest.py
,并使用
-i
开关加载它,如下所示

python -i imptest.py

我在触摸
\uuuuu main\uuuuuuu
时读到了很多评论,但我还是照做了

以下是最终对我有效的代码:

module_list = ['module_a','module_b']

# Import our modules
for name in module_list:
     try:
         __import__(name)
        if name in sys.modules:
            setattr(__main__, name, sys.modules[name])
     except:
        print "FYI we failed importing {0}. It will not be available for you to use".format(name)

你考虑过使用IPython外壳吗?它更舒适,而且肯定支持嵌入。不需要
imp
。只需使用内置函数
globals()。