pkgutil --- Package extension utility¶
Code source : Lib/pkgutil.py
Ce module fournit des utilitaires pour le système d'importation, en particulier pour la prise en charge des paquets.
- class pkgutil.ModuleInfo(module_finder, name, ispkg)¶
Un n-uplet nommé qui contient un bref résumé des informations d'un module.
Ajouté dans la version 3.6.
- pkgutil.extend_path(path, name)¶
Étend le chemin de recherche pour les modules qui composent un paquet. L'usage prévu est de placer le code suivant dans le
__init__.pyd'un paquet :from pkgutil import extend_path __path__ = extend_path(__path__, __name__)
For each directory on
sys.paththat has a subdirectory that matches the package name, add the subdirectory to the package's__path__. This is useful if one wants to distribute different parts of a single logical package as multiple directories.It also looks for
*.pkgfiles beginning where*matches the name argument. This feature is similar to*.pthfiles (see thesitemodule for more information), except that it doesn't special-case lines starting withimport. A*.pkgfile is trusted at face value: apart from skipping blank lines and ignoring comments, all entries found in a*.pkgfile are added to the path, regardless of whether they exist on the filesystem (this is a feature).Si le chemin d'entrée n'est pas une liste (comme c'est le cas pour les paquets figés), il est retourné tel quel. Le chemin d'entrée n'est pas modifié ; une copie étendue en est retournée. Les éléments ne sont ajoutés à la copie qu'à la fin.
L'interpréteur estime que
sys.pathest une séquence. Les éléments desys.pathqui ne sont pas des chaînes se référant à des répertoires existants sont ignorés. Les éléments Unicode sursys.pathqui provoquent des erreurs lorsqu'ils sont utilisés comme noms de fichiers peuvent amener cette fonction à lever une exception (conformément au comportement deos.path.isdir()).
- pkgutil.get_importer(path_item)¶
Récupère un finder pour l'élément path_item donné.
Le chercheur retourné est mis en cache dans
sys.path_importer_caches'il a été récemment créé par le chemin d'un point d'entrée.Le cache (ou une partie de celui-ci) peut être effacé manuellement si une nouvelle analyse de
sys.path_hooksest nécessaire.
- pkgutil.iter_importers(fullname='')¶
Génère des objets finder pour le nom du module donné.
If fullname contains a
'.', the finders will be for the package containing fullname, otherwise they will be all registered top level finders (i.e. those on bothsys.meta_pathandsys.path_hooks).Si le module nommé se trouve dans un paquet, ce paquet est importé en tant qu'effet secondaire de l'invocation de cette fonction.
Si aucun nom de module n'est spécifié, tous les chercheurs de niveau supérieur sont générés.
- pkgutil.iter_modules(path=None, prefix='')¶
Fournit des
ModuleInfopour tous les sous-modules sur path ou, si path estNone, pour tous les modules de niveau supérieur sursys.path.path doit être soit
None, soit une liste de chemins pour rechercher des modules.prefix est une chaîne de caractères à afficher au début de chaque nom de module en sortie.
Note
Cela fonctionne uniquement pour un finder qui définit une méthode
iter_modules(). Cette interface n'est pas standard, donc le module fournit également des implémentations pourimportlib.machinery.FileFinderetzipimport.zipimporter.
- pkgutil.walk_packages(path=None, prefix='', onerror=None)¶
Fournit des
ModuleInfopour tous les modules de manière récursive sur path ou, si path estNone, tous les modules accessibles.path doit être soit
None, soit une liste de chemins pour rechercher des modules.prefix est une chaîne de caractères à afficher au début de chaque nom de module en sortie.
Notez que cette fonction doit importer tous les packages (pas tous les modules !) sur le path donné, afin d'accéder à l'attribut
__path__pour trouver les sous-modules.onerror est une fonction qui est appelée avec un argument (le nom du paquet qui était en cours d'importation) si une exception se produit lors de la tentative d'importation d'un paquet. Si aucune fonction onerror n'est fournie, les
ImportErrors sont attrapées et ignorées, tandis que toutes les autres exceptions sont propagées, mettant fin à la recherche.Exemples :
# list all modules python can access walk_packages() # list all submodules of ctypes walk_packages(ctypes.__path__, ctypes.__name__ + '.')
Note
Cela fonctionne uniquement pour un finder qui définit une méthode
iter_modules(). Cette interface n'est pas standard, donc le module fournit également des implémentations pourimportlib.machinery.FileFinderetzipimport.zipimporter.
- pkgutil.get_data(package, resource)¶
Obtient une ressource à partir d'un paquet.
This is a wrapper for the loader
get_dataAPI. The package argument should be the name of a package, in standard module format (foo.bar). The resource argument should be in the form of a relative filename, using/as the path separator.La fonction renvoie une chaîne binaire qui est le contenu de la ressource spécifiée.
This function uses the loader method
get_data()to support modules installed in the filesystem, but also in zip files, databases, or elsewhere.Pour les paquets situés dans le système de fichiers, qui ont déjà été importés, c'est l'équivalent approximatif de :
d = os.path.dirname(sys.modules[package].__file__) data = open(os.path.join(d, resource), 'rb').read()
Like the
open()function,get_data()can follow parent directories (../) and absolute paths (starting with/orC:/, for example). It can open compilation/installation artifacts like.pyand.pycfiles or files withreserved filenames. To be compatible with non-filesystem loaders, avoid using these features.Avertissement
This function is intended for trusted input. It does not verify that resource "belongs" to package.
If you use a user-provided resource path, consider verifying it. For example, require an alphanumeric filename with a known extension, or install and check a list of known resources.
Si le paquet ne peut pas être localisé ou chargé, ou s'il utilise un loader qui ne prend pas en charge
get_data, alorsNoneest retourné. En particulier, le loader pour les paquets espaces de noms ne prend pas en chargeget_data.Voir aussi
The
importlib.resourcesmodule provides structured access to module resources.
- pkgutil.resolve_name(name)¶
Solutionne un nom en un objet.
Cette fonctionnalité est utilisée dans de nombreux endroits de la bibliothèque standard (voir bpo-12915) - et une fonctionnalité équivalente est également présente dans des paquets largement utilisés tels que Setuptools, Django et Pyramid.
Python s'attend à ce que name soit une chaîne de caractères dans l'un des formats suivants, où W est une abréviation pour un identifiant Python valide et le point représente un point littéral dans ces pseudo-regexes :
W(.W)*W(.W)*:(W(.W)*)?
La première forme est destinée uniquement à assurer la compatibilité ascendante. Elle suppose qu'une partie du nom pointé est un paquet, et que le reste est un objet quelque part à l'intérieur de ce paquet, éventuellement niché à l'intérieur d'autres objets. Puisque l'endroit où le paquet s'arrête et où la hiérarchie des objets commence ne peut pas être déduit par inspection, des tentatives répétées d'importation doivent être effectuées avec cette forme.
Dans la deuxième forme, l'appelant clarifie le point de division en fournissant un seul deux-points : le nom pointé à gauche des deux-points est un package à importer, et le nom pointé à droite est la hiérarchie d'objets à l'intérieur de ce paquet. Seule une importation est nécessaire dans cette forme. Si elle se termine par un deux-points, alors un objet module est retourné.
La fonction renvoie un objet (qui pourrait être un module), ou génère l'une des exceptions suivantes :
ValueError– si name n'est pas un format reconnu.ImportError– si une importation échoue lorsqu'elle n'aurait pas dû.AttributeError– Si un échec s'est produit lors du parcours de la hiérarchie d'objets dans le paquet importé pour accéder à l'objet souhaité.Ajouté dans la version 3.9.