假设我有两个几乎相同版本的python 包mymod,即mymod0 和mymod1。这些包中的每一个都有文件init .py 和 foo.py,而 foo.py 有一个函数 printme()。调用 mymod0.foo.printme() 将打印“I am mymod0”,调用 mymod1.foo.printme() 将打印“I am mymod1”。到现在为止还挺好。
但现在我需要动态导入 mymod0 或 mymod1。用户将在脚本中输入 0 或 1(作为变量“index”),然后我可以创建 packageName="mymod"+str(index)
我试过这个:
module=importlib.import_module(module_name)
module.foo.printme()
但我得到这个错误: AttributeError: 'module' object has no attribute 'foo'
我如何指定现在应该将包称为模块,以便 module.foo.printme() 可以工作?
更新:所以看起来最简单的解决方案是使用 exec() 函数。这样我可以像这样动态地创建一个导入语句:
cmdname="from mymod%s import foo" % index
exec(cmdname)
然后:
foo.printme()
这似乎有效。