我有一个包含一些模块的包:
/package/
mod1
mod2
mod3
我是这样导入的:
from package import *
现在我想在不知道模块名称的情况下遍历包中的模块,因此如果添加更多模块,则不需要更改代码,如下所示:
for module in package
module.some_method()
可以这样做吗?
答案 0 :(得分:0)
除非您在包中的__all__
文件中的__init__.py
列表中列出子模块,否则无法从包中导入子模块。
https://docs.python.org/3/tutorial/modules.html#importing-from-a-package
在某些时候,您需要知道模块名称。这可能对你有用,但可能会产生一些意想不到的后果。
答案 1 :(得分:0)
如果软件包在其中__init__.py
导入模块,您可以从软件包中获取模块。例如:
# package/__init__.py
import mod1
import mod2
import mod3
然后你可以导入包,只需查找该包的所有成员即"模块"类型:
import types
import package
for mod in package.__dict__.values():
if type(mod) == types.ModuleType:
print mod, 'is a module!'
答案 2 :(得分:-1)
并不总是在python中将分布式模块打包为一个包。它无法完成。
答案 3 :(得分:-1)
您可以尝试:
import inspect
import yourmodule
all_module = inspect.getmembers(yourmodule,inspect.ismodule)
print(all_module)#will list all related module