如何使用 importlib.import_module 在 Python 中导入模块
Posted
技术标签:
【中文标题】如何使用 importlib.import_module 在 Python 中导入模块【英文标题】:How to import a module in Python with importlib.import_module 【发布时间】:2012-05-27 08:26:23 【问题描述】:我正在尝试在 Python 2.7.2 中使用 importlib.import_module
并遇到奇怪的错误。
考虑以下目录结构:
一种 | + - __init__.py - b | + - __init__.py -c.pya/b/__init__.py
的代码如下:
(在实际代码中"c"
有一个名字。)
尝试import a.b
,会产生以下错误:
我错过了什么?
谢谢!
【问题讨论】:
【参考方案1】:对于相对导入,您必须:
a) 使用相对名称b) 明确提供锚点
importlib.import_module('.c', 'a.b')
当然,你也可以只做绝对导入:
importlib.import_module('a.b.c')
【讨论】:
【参考方案2】:我认为最好使用importlib.import_module('.c', __name__)
,因为您不需要了解a
和b
。
我也想知道,如果你必须使用importlib.import_module('a.b.c')
,为什么不直接使用import a.b.c
?
【讨论】:
当模块名是变量时很有用。 当模块名称不是有效的python标识符(例如,其中包含破折号)时,它也很有用。【参考方案3】:别忘了为每个文件夹/子文件夹创建一个__init__.py
(即使它们是空的)
【讨论】:
为什么?我发现了这个:***.com/questions/448271/what-is-init-py-for#448279 @TwoBItAlchemist 的评论最有用 我认为“”“Python 搜索目录列表以解析名称,例如 import 语句。因为这些可以是任何目录,并且可以添加任意目录对于最终用户,开发人员必须担心目录碰巧与有效的 Python 模块共享名称,例如 docs 示例中的 'string'。为了缓解这种情况,它会忽略不包含名为 _ 的文件的目录init _ _.py(无空格),即使它是空白的。"""以上是关于如何使用 importlib.import_module 在 Python 中导入模块的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]