假设我有两个几乎相同的python包mymod版本,即mymod0和mymod1。每个包都有文件init.py和食品,和食品有一个函数printme()。正在呼叫mymod0。印刷字体()将打印“我是mymod0”并调用mymod1。印刷字体()将打印“我是mymod1”。到现在为止,一直都还不错。在
但现在我需要动态导入mymod0或mymod1。用户将在脚本中输入0或1(作为变量“index”),然后我可以创建packageName=“mymod”+str(index)
我试过了:
module=importlib.import_module(module_name)
module.foo.printme()
但我得到一个错误: AttributeError:“module”对象没有属性“foo”
如何指定包现在应该被称为模块,以便module.foo.printme()行吗?在
更新:所以看起来最简单的解决方案是使用exec()函数。这样我就可以动态地创建一个import语句,如下所示:
^{pr2}$然后:
foo.printme()
这似乎有效。在
必须确保
<module_name>.__init__
将foo
导入模块的命名空间:那你就可以了
^{pr2}$注意,这只适用于第一次,因为python缓存加载的模块。如果模块在程序启动后发生了更改,请使用^{} function 函数。只需提醒一句:有几个与此相关的注意事项,并且它可能最终不会按照您的预期进行。在
相关问题 更多 >
编程相关推荐