1

我在 python 2.7 中总共有三个文件:

  1. 某个目录中的模块文件(例如module1.py
  2. 同一目录中的不同模块,它导入此模块(例如worker.py
  3. 顶级目录导入的主脚本worker.py

当文件worker.py如下所示

import module1 as mod

一切都按预期工作(即我可以worker.mod.XXX在我的主代码中使用)。但是当我替换worker.py如下内容时(我希望这样做):

mod = __import__('module1')

我收到一个错误:ImportError: No module named module1。我需要后一种方法来处理从列表中自动导入模块的事情。

我在这里想念什么?

更准确地说:我只是在寻找一种方法,将语句 import module1 as mod 替换为module1字符串表达式。我有例如modulname='module1',并且想要使用在字符串中给出的模块名称导入模块modulname。怎么做?

4

2 回答 2

3

__import__(name, globals={}, locals={}, fromlist=[], level=-1) -> module

导入一个模块。因为这个函数是供 Python 解释器使用的,而不是一般用途,所以最好用于 importlib.import_module()以编程方式导入模块。

globals参数仅用于确定上下文;它们没有被修改。locals 参数未使用。fromlist 应该是要模拟的名称列表from name import ...,或者是要模拟的空列表import name。从包中导入模块时,注意__import__('A.B', ...) 当 fromlist 为空时返回包 A,但当 fromlist 不为空时返回其子模块 B。级别用于确定是执行绝对导入还是相对导入。-1 是尝试绝对和相对导入的原始策略,0 是绝对的,正数是相对于当前模块要搜索的父目录的数量。

于 2012-12-07T08:13:43.790 回答
2

尝试这个:

mod = __import__('module1', globals=globals())
于 2012-12-07T09:03:44.030 回答