grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026î   f}[ã@sÀdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z e j ƒ�!e j de ƒddlZWdQXeejjdƒgƒZeejjdƒgƒZeejjdƒgƒZeejjdƒgƒZeegZeejgƒZiZdd „ZiZd d „ZGd d „d ƒZGdd„dƒZdd„Zedkr¼y eƒZ Wne!k r¸e"dƒYnXndS)z3Find modules used by a script, using introspection.éNÚignoreÚ LOAD_CONSTÚ IMPORT_NAMEÚ STORE_NAMEÚ STORE_GLOBALcCstj|gƒj|ƒdS)N)ÚpackagePathMapÚ setdefaultÚappend)Z packagenameÚpath©r ú1/opt/alt/python34/lib64/python3.4/modulefinder.pyÚAddPackagePath!sr cCs|t|r?r@)rrAÚdirrZextrBrCr r r Ú load_fileqs zModuleFinder.load_filer5c Cs…|jdd||||ƒ|j|d|ƒ}|j||ƒ\}}|j||ƒ}|se|S|jr�|j||ƒndS)NéÚ import_hookr/)r4Údetermine_parentÚfind_head_packageÚ load_tailrÚensure_fromlist) rrÚcallerÚfromlistr/ÚparentÚqÚtailÚmr r r rJxs zModuleFinder.import_hookcCsÌ|jdd||ƒ| s)|dkr=|jddƒdS|j}|dkr|jrh|d8}n|dkrª|j|}||ks“t‚|jdd|ƒ|S|jdƒ|krÎtdƒ‚ndj|j dƒd| …ƒ}|j|}|jdd|ƒ|S|jrT|j|}||ks=t‚|jdd|ƒ|Sd|kr¸|j dƒ}|d|…}|j|}|j|ks¡t‚|jdd|ƒ|S|jddƒdS) NérKrzdetermine_parent -> Noner5zdetermine_parent ->Ú.zrelative importpath too deep) r6r7rrr#ÚAssertionErrorÚcountÚ ImportErrorÚjoinrEÚrfind)rrOr/ZpnamerQr2r r r rKƒsB      #     zModuleFinder.determine_parentcCs>|jdd||ƒd|krX|jdƒ}|d|…}||dd…}n |}d}|r€d|j|f}n|}|j|||ƒ}|rÄ|jdd||fƒ||fS|r|}d}|j|||ƒ}|r|jdd||fƒ||fSn|jdd|ƒtd |ƒ‚dS) NrUrLrVr5r:z%s.%szfind_head_package ->z"raise ImportError: No module namedzNo module named )r6ÚfindrÚ import_moduler7rY)rrQrr2ÚheadrSZqnamerRr r r rL¦s.   zModuleFinder.find_head_packagecCsã|jdd||ƒ|}x­|rË|jdƒ}|dkrOt|ƒ}n|d|…||dd…}}d|j|f}|j|||ƒ}|s|jdd|ƒtd|ƒ‚qqW|jdd |ƒ|S) NrUrMrVrr5z%s.%sz"raise ImportError: No module namedzNo module named z load_tail ->)r6r\Úlenrr]r7rY)rrRrSrTr2r^Zmnamer r r rMÁs  %zModuleFinder.load_tailcCsÄ|jdd|||ƒx¤|D]œ}|dkri|s¼|j|ƒ}|rf|j||dƒqfq¼q t||ƒs d|j|f}|j|||ƒ}|s¼td|ƒ‚q¼q q WdS)NrUrNÚ*r5z%s.%szNo module named )r4Úfind_all_submodulesrNÚhasattrrr]rY)rrTrPZ recursiveÚsubÚallÚsubnameZsubmodr r r rNÐs  zModuleFinder.ensure_fromlistc CsB|js dSi}g}|tjjdd…7}|tjjdd…7}|tjjdd…7}xÎ|jD]Ã}ytj|ƒ}Wn(tk r´|j dd|ƒwqYnXx||D]t}d}xF|D]>}t |ƒ} || d…|krÏ|d| …}PqÏqÏW|r¼|dkr¼|||YnX|jdd|ƒ|S||jkry|jddƒdS|r¢|jdkr¢|jddƒdSy+|j||oº|j|ƒ\}}}Wn)tk rø|jdddƒdSYnXz|j||||ƒ}Wd|r+|j ƒnX|rEt |||ƒn|jdd|ƒ|S)NrIr]zimport_module ->zimport_module -> None) r6r#ÚKeyErrorr7r$rÚ find_modulerYr@ÚcloseÚsetattr)rZpartnameÚfqnamerQrTrBrArCr r r r]ús6  "  zModuleFinder.import_modulec Cs‹|\}}}|jdd||o'd|ƒ|tjkrf|j||ƒ}|jdd|ƒ|S|tjkr”t|jƒd|dƒ} n‹|tjkryt j j |jƒƒ} WnEt k r} z%|jddt | ƒ|ƒ‚WYdd} ~ XnXtj| ƒ} nd} |j|ƒ}||_| rt|jrX|j| ƒ} n| |_|j| |ƒn|jdd|ƒ|S)Nr8r@rBzload_module ->Ú Úexeczraise ImportError: )r6r>Z PKG_DIRECTORYÚ load_packager7r?ÚcompileÚreadZ PY_COMPILEDrfÚ _bootstrapÚ_validate_bytecode_headerrYr0ÚmarshalÚloadsÚ add_modulerr(Úreplace_paths_in_coderÚ scan_code) rrvrBrAÚ file_infoÚsuffixÚmodeÚtyperTÚcoZ marshal_dataÚexcr r r r@s2   zModuleFinder.load_modulecCsQ||jkri|j|~s z*ModuleFinder.scan_code..r/rVr�)r‘r›rrŒrr#ÚgetrÚupdaterrrKÚ RuntimeErrorr“Ú isinstancer†r‚)rr‡rTr˜ÚscannerZwhatr1rrPZ have_starZmmr/rQršr r r r‚qsH              zModuleFinder.scan_codec CsÞ|jdd||ƒtj|ƒ}|r4|}n|j|ƒ}||_|g|_|jtj|gƒ|_|jd|jƒ\}}}z1|j||||ƒ|j dd|ƒ|SWd|rÙ|j ƒnXdS)Nr8ryrzload_package ->) r6rrŸr€rrrrsr@r7rt)rrvrArrTrBZbufrCr r r ry¢s   zModuleFinder.load_packagecCs5||jkr|j|St|ƒ|j|<}|S)N)r#r)rrvrTr r r r€·s zModuleFinder.add_modulecCs§|dk r |jd|}n|}||jkrW|jdd|ƒt|ƒ‚n|dkr—|tjkr‹ddddtjffS|j}ntj ||ƒS)NrVrIzfind_module -> Excludedr:) rr'r7rYr"Úbuiltin_module_namesr>Z C_BUILTINr rs)rrr rQr‹r r r rs½s   zModuleFinder.find_modulecCs‚tƒtddƒtddƒt|jjƒƒ}xa|D]Y}|j|}|jrntdddƒntdddƒtd ||jp”d ƒq?W|jƒ\}}|rtƒtd ƒxF|D];}t|j|jƒƒ}td |d dj|ƒƒqÌWn|r~tƒtdddƒtdƒxF|D];}t|j|jƒƒ}td |d dj|ƒƒq<WndS)z’Print a report to stdout, listing the found modules with their paths, as well as modules that are missing, or seem to be missing. z %-25s %sÚNameÚFileú----ÚPr*r+rTz%-25sr:zMissing modules:ú?z imported fromz, z7Submodules that appear to be missing, but could also bez#global names in the parent package:N)zNamer¦)r§r§) r-Úsortedr#rmrrÚany_missing_mayber$rZ)rrmÚkeyrTÚmissingÚmayberZmodsr r r ÚreportÎs0     #  zModuleFinder.reportcCs|jƒ\}}||S)z½Return a list of modules that appear to be missing. Use any_missing_maybe() if you want to know which modules are certain to be missing, and which *may* be missing. )r«)rr­r®r r r Ú any_missingðszModuleFinder.any_missingcCs.g}g}x|jD]ö}||jkr1qn|jdƒ}|dkr_|j|ƒqn||dd…}|d|…}|jj|ƒ}|dk rÿ||j|krÄ|j|ƒq ||jkrÖq |jrï|j|ƒq |j|ƒq|j|ƒqW|jƒ|jƒ||fS)a®Return two lists, one with modules that are certainly missing and one with modules that *may* be missing. The latter names could either be submodules *or* just global names in the package. The reason it can't always be determined is that it's impossible to tell which names are imported when "from module import *" is done with an extension module, short of actually importing it. rVrr5N) r$r'r[r r#rŸrrÚsort)rr­r®rr2reZpkgnameZpkgr r r r«øs0       zModuleFinder.any_missing_maybecCsŽtjj|jƒ}}xD|jD]9\}}|j|ƒr#||t|ƒd…}Pq#q#W|jrË||jkrË||kr¡|j dd||fƒn|j dd|fƒ|jj |ƒnt |j ƒ}xMt t|ƒƒD]9}t||t|ƒƒrí|j||ƒ||r”ÚopnameÚindexrrrrr•r–rr rrrr!rÐrrÏÚKeyboardInterruptr-r r r r Ús>             ÿü ;