python - 在运行时导入模块

标签 python python-import

我正在尝试使用 __import__() 导入模块。我需要使用 __import__ 因为我不知道在运行前我需要哪个模块。

假设我需要的模块是 MyClass。文件树是 api/apps/myapp/my_class.py,我在 my_class.py 中的类是 MyClass。现在,要访问 MyClass 的方法,我正在做的是:

my_class_module =  __import__('api.apps.myapp.my_class')
my_class= my_class_module.MyClass()

但是我收到了这个错误: “模块”对象没有属性“MyClass”

有什么想法吗?

最佳答案

默认情况下,__import__ 返回对第一个 模块的引用。在您的示例中,它是 api。解决方法是使用fromlist参数:

my_class_module =  __import__('api.apps.myapp.my_class', fromlist=[''])

来自 __import__ 文档:

[...] 从包中导入模块时,请注意 ___import___('A.B', ...) 当 fromlist 为空时返回包 A,但当 fromlist 不为空。 [...]

有关它这样做的原因的详细信息,请参阅 Why does Python's __import__ require fromlist?

关于python - 在运行时导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19220755/

相关文章:

Python:将列表更新为字典值

python - 添加外键到 Django 模型

python - 如何将时间拆分为小时?

python - 如何从不同的服务器导入 python 文件?

python - 从同一目录中的所有模块导入并调用相同的函数

python - 适用于 Python 的 Google 云端硬盘 API : how to create credential?

python - Pyramid + FormAlchemy 模型改进

python - "Move"IntelliJ 中的重构不适用于输入

python - 在 import 语句中使用文件路径 python

python - 在 Python 中导入模块时运行函数