在python中是否可以从文件夹/包中获取模块列表并导入它们?
我希望能够从类中的函数执行此操作,以便整个类可以访问它们(可能通过__init__
方法完成)。
非常感谢任何帮助。
答案 0 :(得分:3)
请参阅modules document。
唯一的解决方案是让包作者提供一个明确的 包的索引。 import语句使用以下内容 约定:如果包的
__init__.py
代码定义了一个名为的列表__all__
,它被视为遇到包import *时应导入的模块名称列表。这取决于 包的作者在新版本的时候保持这个列表是最新的 包发布。包裹作者也可能决定不支持 它,如果他们没有看到从他们的包中导入*的用途。对于 例如,文件sound / effects /__init__.py
可以包含 以下代码:__all__ = ["echo", "surround", "reverse"]
这意味着从sound.effects import *将导入声音包的三个命名子模块。
是的,您可以通过为目录中的文件创建目录列表并手动导入它们来找到一种方法。但是你没有内置的语法。
答案 1 :(得分:0)
您可以使用dir函数
了解模块列表import module
dir (module)
稍后在程序中,您可以导入单个函数:
from module import function
答案 2 :(得分:0)
distribute
模块提供了一种机制,可以完成大部分工作。首先,您可以首先使用pkg_resources.resource_listdir
列出python文件:
>>> module_names = set(os.path.splitext(r)[0]
... for r
... in pkg_resources.resource_listdir("sqlalchemy", "/")
... if os.path.splitext(r)[1] in ('.py', '.pyc', '.pyo', '')
... ) - set(('__init__',))
>>> module_names
set(['engine', 'util', 'exc', 'pool', 'processors', 'interfaces',
'databases', 'ext', 'topological', 'queue', 'test', 'connectors',
'orm', 'log', 'dialects', 'sql', 'types', 'schema'])
然后,您可以在循环中导入每个模块:
modules = {}
for module in module_names:
modules[module] = __import__('.'.join('sqlalchemy', module))