【发布时间】:2010-10-20 15:37:11
【问题描述】:
我正在尝试动态加载我创建的模块。
现在这工作正常:
import structures.index
但是如果我通过动态导入来尝试同样的事情,它会失败。
struct = __import__("structures.index")
提供的错误是:
Error ('No module named structures.index',)
有什么想法吗?
编辑:当使用完整范围时(它有点工作?):
struct = __import__("neoform.structures.index")
这不会引发任何错误,但是,它不会加载索引模块,而是加载“neoform”模块。
“struct”的结果是:
<module 'neoform' from '/neoform/__init__.py'>
另外,作为一个附带问题,我如何在动态加载的模块中实例化一个类? (假设所有模块都包含一个共同的类名)。
编辑:解决方案:(感谢 coonj 和 Rick)这最终是有效的。不知道为什么(还),但fromlist 必须是“显然任何东西,因为当我将字母“a”作为值时它起作用(奇怪,因为文件中只有 1 个类)。
def get_struct_module(self, name):
try:
return = __import__("neoform.structures." + name, fromlist='*')
except ImportError, e:
self.out.add("Could not load struct: neoform.structure." + name + "\n\n" + "Error " + str(e.args))
【问题讨论】:
-
一个错误信息会很有用
-
__import__('structures.index')应该像import structures.index一样返回对structures的引用。您遇到什么错误? -
错误('没有名为结构的模块',)
-
并且您确定您有一些文件结构/index.py(并且“导入结构.index”不会因相同的错误而失败?)
-
是的,这让我很困惑。 “导入结构。索引”有效。 (刚刚在 10 秒前再次测试过。我用它替换了 map(...) 代码..加载得很好。:(
标签: python dynamic module loading