动态加载Python模块
发布时间:2020-12-20 12:39:06 所属栏目:Python 来源:网络整理
导读:我正在尝试动态加载我创建的模块. 现在这可以正常工作: import structures.index 但如果我通过动态导入它来尝试同样的事情,它就会失败. struct = __import__("structures.index") 提供的错误是: Error ('No module named structures.index',) 有什么想法吗
我正在尝试动态加载我创建的模块.
现在这可以正常工作: 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 + "nn" + "Error " + str(e.args)) 解决方法
我不确定“失败”意味着什么,所以我只是提到__import __(‘structures.index’)实际上应该可以工作,但是它不会在当前范围内分配模块名称.要做到这一点(然后在动态导入的模块中使用一个类),你将不得不使用:
structures = __import__('structures.index') structures.index.SomeClass(...) __import__的完整详细信息可用于here. 编辑:(基于问题编辑) 要导入neoform.structures.index并返回索引模块,您将执行以下操作: structures = __import__('neoform.structures.index',fromlist=['does not in fact matter what goes here!']) 因此,如果您有一个包名列表包,则可以使用以下代码导入其索引模块并为每个包实例化一些MyClass类: modules = [ __import__('neoform.%s.index' % pkg,fromlist=['a']) for pkg in packages ] objects = [ m.MyClass() for m in modules ] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |