Il est généralement utilisé avec pkgutil de laisser un package d'être mis sur le disque. E. g., zope.interface et zope.le schéma sont séparés des distributions (zope
est un "espace de noms de paquets"). Vous pourriez avoir zope.interface installée en /usr/lib/python2.6/site-packages/zope/interface/
, tandis que vous êtes à l'aide de zope.schéma plus localement en /home/me/src/myproject/lib/python2.6/site-packages/zope/schema
.
Si vous mettez de l' pkgutil.extend_path(__path__, __name__)
en /usr/lib/python2.6/site-packages/zope/__init__.py
alors zope.interface et zope.schéma sera importable car pkgutil aura du changement __path__
de ['/usr/lib/python2.6/site-packages/zope', '/home/me/src/myproject/lib/python2.6/site-packages/zope']
.
pkg_resources.declare_namespace
(une partie de Setuptools), c'est comme pkgutil.extend_path
, mais est de plus en plus conscients de zips sur le chemin.
Modifier manuellement __path__
est rare et n'est probablement pas nécessaire, mais il est utile de regarder la variable lors du débogage des problèmes d'import de noms de paquets.
Vous pouvez également utiliser __path__
pour monkeypatching, par exemple, j'ai monkeypatched distutils à la fois par la création d'un fichier distutils/__init__.py
c'est tôt, sys.path
:
import os
stdlib_dir = os.path.dirname(os.__file__)
real_distutils_path = os.path.join(stdlib_dir, 'distutils')
__path__.append(real_distutils_path)
execfile(os.path.join(real_distutils_path, '__init__.py'))
# and then apply some monkeypatching here...