gpt4 book ai didi

python - 动态导入python模块

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:07 29 4
gpt4 key购买 nike

我有以下项目结构:

python/
..core/
..envs/
..default/
....__init__
....default.py
..dev1/
....__init__
....dev1.py
dynamic_inventory.py

dev1 我有以下内容:

from ..default.default import BaseInventory

在动态库存中:

import inspect
from envs.dev1 import dev1
print inspect.getmembers(dev1, inspect.isclass)

它给了我正确的代码:

> [('BaseInventory', <class 'envs.default.default.BaseInventory'>),
> ('BatchProcessor', <class 'envs.dev1.dev1.BatchProcessor'>), ...

但动态地:

import inspect

sys.path.append("python/envs")
m = __import__("dev1")
print inspect.getmembers(m, inspect.isclass)

给我:[]

如何动态导入模块?

谢谢!

最佳答案

您的代码有两个问题。

首先,当您编写 from envs.dev1 import dev1 时,您是从 envs.dev1 包中导入 dev1。但是使用 __import__("dev1"),您将其作为独立模块导入。

其次:使用 sys.path.append("python/envs"); __import__("dev1") 您正在导入 python/envs/dev1/__init__.py,因为 python/envs 目录包含 dev1 目录。但是你想要 python/envs/dev1/dev1.py 文件。这就是您得到一个空列表的原因:您的 __init__.py 没有定义任何类。

将所有内容放在一起:

import inspect

# no sys.path manipulation
dev1 = __import__('envs.dev1.dev1', fromlist=['dev1'])
print inspect.getmembers(dev1, inspect.isclass)

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com