【发布时间】:2011-05-25 03:45:17
【问题描述】:
我想通过以下方式动态导入模块:
我用这个结构创建了一个名为 pkg 的文件夹:
pkg
|__init__.py
|foo.py
在__init__.py的头部,加入这段代码:
pkgpath = os.path.dirname(pkg.__file__);
for module in pkgutil.iter_modules([pkgpath]):
__import__(module[1], locals(), globals());
m = sys.modules[module[1]];
print m.__package__;
如果 foo.py 中没有导入语句,我发现 m.__package__ 是 None
但是如果我添加这样一个简单的导入语句:
import os
然后m.__package__ 是“pkg”,这是正确的包名称。
为什么会这样?
如何导入模块并确保其包属性正确?
【问题讨论】:
-
很难看到你的目标。至少表明你打算如何调用或导入 pkg。
-
你为什么要那样做?你到底想解决什么问题?
-
让我给出我的目标:我需要创建一个函数来加载所有模块一个在运行时提供的包。包可以嵌套——这意味着这个包中有子包。如果所有模块都正确加载,另一个函数将分析任意两个模块之间的关系。例如,如果一个模块中的 package 属性是另一个模块的名称,那么后者就是前者的包。
标签: python module load dynamic