o 0¦i ` ã @ sl d Z ddlmZ ddlmZ ddlZddlZddlZddl Z ddl Z ddlZddlm Z ddlZg d¢ZeddƒZd e_ d d„ Zdd „ Zd.dd„Zd/dd„Zed0dd„ƒZd0dd„Ze ejje¡ dd„ ZG dd„ dƒZG dd„ dƒZzddlZddlmZ d0dd„Ze ee¡ W n e y” Y nw d d!„ Z!d0d"d#„Z"d$d%„ Z#d&d'„ Z$d(d)„ Z%d*d+„ Z&da'd,d-„ Z(dS )1zUtilities to support packages.é )Ú namedtuple)ÚsingledispatchN)Ú ModuleType)Úget_importerÚiter_importersÚ get_loaderÚfind_loaderÚ walk_packagesÚiter_modulesÚget_dataÚImpImporterÚ ImpLoaderÚ read_codeÚextend_pathÚ ModuleInfor zmodule_finder name ispkgz.A namedtuple with minimal info about a module.c C sJ z| j }W ||ƒS ty$ | |¡}|du rY dS tj ||¡ Y S w )z'Return the finder-specific module spec.N)Ú find_specÚAttributeErrorÚfind_moduleÚ importlibÚutilÚspec_from_loader)ÚfinderÚnamer Úloader© r ú./opt/alt/python310/lib64/python3.10/pkgutil.pyÚ _get_spec s ú ür c C s6 dd l }| d¡}|tjjkrd S | d¡ | | ¡S )Nr é é )ÚmarshalÚreadr r ÚMAGIC_NUMBERÚload)Ústreamr Úmagicr r r r ( s r Ú c # sÊ � i fdd„‰ t | |ƒD ]V}|V |jrbzt|jƒ W n% ty- |dur+||jƒ Y q ty@ |dur=||jƒ n‚ Y qw ttj|j ddƒpLg } ‡ fdd„| D ƒ} t | |jd |ƒE dH qdS )a« Yields ModuleInfo for all modules recursively on path, or, if path is None, all accessible modules. 'path' should be either None or a list of paths to look for modules in. 'prefix' is a string to output on the front of every module name on output. Note that this function must import all *packages* (NOT all modules!) on the given path, in order to access the __path__ attribute to find submodules. 'onerror' is a function which gets called with one argument (the name of the package which was being imported) if any exception occurs while trying to import a package. If no onerror function is supplied, ImportErrors are caught and ignored, while all other exceptions are propagated, terminating the search. Examples: # list all modules python can access walk_packages() # list all submodules of ctypes walk_packages(ctypes.__path__, ctypes.__name__+'.') c S s | |v rdS d|| <