Python 包扩展实用程序


当您想要为特定包添加模块搜索路径并使用包中包含的资源时,需要使用 Python 库中的 pkgutil 模块。它包含用于更改 Python 包导入规则的函数。也可以从包中分发的文件中加载非代码资源。

extend_path(path, name)

扩展包含包的模块的搜索路径。预期用途是将以下代码放在包的 __init__.py 中

import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)

extend_path() 在 sys.path 中扫描包含名为第二个参数给出的包的子目录的目录。目录列表与作为第一个参数传递的路径值组合,并作为单个列表返回,适合用作包导入路径。

**find_loader(fullname):** 获取给定 fullname 的模块加载器。

**get_importer(path_item):** 获取给定 path_item 的查找器。

get_loader(module_or_name)

获取 module_or_name 的加载器对象。

**iter_importers(fullname=''):** 为给定的模块名称生成查找器对象。

**iter_modules(path=None, prefix=''):** 生成 path 上所有子模块的 ModuleInfo,或者如果 path 为 None,则生成 sys.path 上所有顶级模块的 ModuleInfo。

>>> pk = pkgutil.iter_modules()
>>> for p in pk:
   print (p[1])

**walk_packages(path=None, prefix='', onerror=None):** 递归生成 path 上所有模块的 ModuleInfo,或者如果 path 为 None,则生成所有可访问模块的 ModuleInfo。

import pkgutil
import sys
def explore_package(module_name):
   loader = pkgutil.get_loader(module_name)
   for sub_module in pkgutil.walk_packages([loader.filename]):
      _, sub_module_name, _ = sub_module
      qname = module_name + "." + sub_module_name
      print(qname)
      explore_package(qname)

ModuleInfo(module_finder, name, ispkg): 这返回一个命名元组,其中包含模块信息的简要摘要。

更新于:2019年7月30日

579 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.