在不知道模块名称的情况下在包中使用python模块

时间:2018-02-17 06:28:21

标签: python

我有一个包含一些模块的包:

/package/
   mod1
   mod2
   mod3

我是这样导入的:

from package import *

现在我想在不知道模块名称的情况下遍历包中的模块,因此如果添加更多模块,则不需要更改代码,如下所示:

for module in package
   module.some_method()

可以这样做吗?

4 个答案:

答案 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