Python中模块的导入文件夹[英] Import folder of modules in Python

问题描述

Python中是否有可能从文件夹/软件包中获取模块列表?

我希望能够从类中的功能中执行此操作,以便整个类都可以访问它们(可能是从__init__方法完成的).

任何帮助将不胜感激.

推荐答案

请参阅模块文档.

唯一的解决方案是包装作者提供明确的解决方案 包装的索引.导入语句使用以下 惯例:如果包装的__init__.py代码定义了名称的列表 __all__,它被视为遇到封装 *时应导入的模块名称的列表.这取决于 当新版本的新版本的新版本 软件包已发布.包装作者也可能决定不支持 如果他们看不到从包装中导入 *的用途.为了 例如,文件声音/效果/__init__.py可以包含 以下代码:

__all__ = ["echo", "surround", "reverse"]

这意味着从声音.

是的,您可以通过对目录中的文件进行目录列表并手动导入这些目录来找到一种方法.但是没有内置的语法.

其他推荐答案

您可以知道使用DIR函数的模块列表

import module
dir (module)

稍后在程序中,您可以导入一个函数:

from module import function

其他推荐答案

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))

本文地址:https://www.itbaoku.cn/post/902477.html