Package extension utility in Python


When you want to add to the module search path for a specific package and work with resources included in a package, you need to use pkgutil module from Python library. It includes functions for changing the import rules for Python packages. It is also possible to load non-code resources from files distributed within a package.

extend_path(path, name)

Extend the search path for the modules which comprise a package. Intended use is to place the following code in a package’s __init__.py

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

extend_path() scans sys.path for directories that include a subdirectory named for the package given as the second argument. The list of directories is combined with the path value passed as the first argument and returned as a single list, suitable for use as the package import path.

find_loader(fullname): Retrieve a module loader for the given fullname.

get_importer(path_item): Retrieve a finder for the given path_item.

get_loader(module_or_name)

Get a loader object for module_or_name.

iter_importers(fullname=''): Yield finder objects for the given module name.

iter_modules(path=None, prefix=''): Yields ModuleInfo for all submodules on path, or, if path is None, all top-level modules on sys.path.

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

walk_packages(path=None, prefix='', onerror=None): Yields ModuleInfo for all modules recursively on path, or, if path is None, all accessible modules.

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): This returns a namedtuple that holds a brief summary of a module’s info.

Vikyath Ram
Vikyath Ram

A born rival

Updated on: 30-Jul-2019

452 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements