bg4e dZddlmZmZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z mZddlmZedgdZdZeZejd ZGd d eZed kre jd dZeed kredZed dZndZeed kredZed dZndZe jdd eze _eZe j d!edddeedddfdSdS)z The PythonInfo contains information about a concrete instance of a Python interpreter Note: this file is also used to query target interpreters, so can only use standard library methods )absolute_importprint_functionN) OrderedDict namedtuple)digits VersionInfo)majorminormicro releaselevelserialc ttjdgtjddtjzS)NPATHEXT) listrfromkeysosenvirongetlowersplitpathsepm/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/virtualenv/discovery/py_info.py_get_path_extensionsrsP  $bTBJNN9b,I,I,O,O,Q,Q,W,WXZXb,c,c%cdd e eerz\{\w+\}c$eZdZdZdZdZdZedZe dZ e dZ e dZ e d Z e d Zd ejfd Zd'dZe dZe dZe dZdZdZdZe dZedZdZd Zd Zed(dZed(dZ dZ!dZ"ed)dZ#edZ$edZ%ed Z&iZ'd*d!Z(d"Z)ed#Z*d$Z+d%Z,d&Z-d S)+ PythonInfoz-Contains information for a Python interpreterc  d d} tj_ tj_jdkr*t fdtjD_t fdtjD_tjdkrdnd_ tj d _  tj _  tj_ |t!td d_ |t!td d_ |t!td d_ |t!td d_ |t!tdd_ |tj_ |j__ t5dd}n#t6$rd}YnwxYw|_ fdtjD_ tj_ t!tj dd_!tj"}d|vr4d_# fdtj$D_%i_&ntjdddkr7d|vr3d_#fdtj$D_%i_&nbd_# fdtj$D_% fd'(D_&t!tdt!tdd} fdd|ffD_ tS}j%*D]E}tV,|D](}|- |d d!)F|-d" fd#|D_.jdkrtjj/dkr d$j.d%<fd&j.(D}0d'|_10d(|_2t!td)t!td*d_3d_4dS)+NcZt|tr|dn|S)Nutf-8) isinstancebytesdecodevs ruzPythonInfo.__init__..u"s((21e(<(<C188G$$$! CrcH|dntj|SN)rpathabspathr%s rabs_pathz%PythonInfo.__init__..abs_path%s944"'//!*<*< z&PythonInfo.__init__..,s+*O*OA11Q44*O*O*O*O*O*Orc&g|] }|Srrr/s r z'PythonInfo.__init__../s!)I)I)I1!!A$$)I)I)Irl@ py_version_nodotprefix base_prefix real_prefixbase_exec_prefix exec_prefixvenvTFc&g|] }|Srrr/s rr4z'PythonInfo.__init__..Ls!,,,aQQqTT,,,rencodingc ni|]1}|tj|dj2SF)expandscheme sysconfigget_pathsysconfig_scheme)r0r1selfr's r z'PythonInfo.__init__..TsR$$$!aa *1U4CXYYYZZ$$$r) deb_system posix_prefixcJi|]}|tj|dj SrArD)r0r1rHs rrIz'PythonInfo.__init__.._s=$$$YZ9%ad>STTT$$$rc bi|]+}|tj|d,S)F)rB)rErFr/s rrIz'PythonInfo.__init__..fs>#u#u#uUVAAaDD!!I,>q,O,O,O*P*P#u#u#urc@i|]\}}||Srrr0kr&r's rrIz'PythonInfo.__init__..gs/%_%_%_TQaaddAAaDD%_%_%_rget_makefile_filename_get_makefile_filenamecDi|]\}}|||Sr)rrRs rrIz'PythonInfo.__init__..ks@   1} AaDD!!A$$ }}rmakefile_filenamePYTHONFRAMEWORKcbi|]+}|tj|pd,Sr)rEget_config_varr/s rrIz'PythonInfo.__init__..zs=cccaqqttQQy'?'B'B'Hb%I%Icccrpythonimplementation_lowerc^i|])\}}||jrjn|*Sr startswithr8 system_prefixr0rSr&rHs rrIz'PythonInfo.__init__..~s=uuuQUQRTU1<< +D+DKT''!uuurstdlib platstdlibmaxsizemaxint)5sysplatformpython_implementationimplementationtuplepypy_version_infor version_inforg architecturerEr] version_nodotversionrnamegetattrr8r9r:r;r< executableoriginal_executable_fast_get_system_executablesystem_executable __import__ ImportErrorhas_venvr*getfilesystemencodingfile_system_encodingstdoutstdout_encodingget_scheme_namesrGget_path_namessysconfig_pathsdistutils_install_distutils_installitemssetvalues _CONF_VAR_REfindalladdsysconfig_varsr sysconfig_path system_stdlibsystem_stdlib_platformmax_size _creators) rHr,has scheme_namesmakefileconfig_var_keyselementrSconfsr's ` @r__init__zPythonInfo.__init__!s D D D = = =#, a > @ @AA  & ( (%**O*O*O*O9N*O*O*O%O%OD "()I)I)I)I8H)I)I)IJ"%+"5"5BB2'56HIIq~~ !BG**ah!=!=>>?? 1XXgc=$&G&GHHII1XXgc=$&G&GHHII!"((738JD+Q+Q"R"R S S1XXgc=$&G&GHHII!HHS^4455#$1XXdo%>%>#?#? !%!A!A!C!C  v   CC   CCC  ,,,,38,,, $%Ac&?&A&A$B$B! qZ!F!FGG 133 \ ! !$*D !$$$$$"133$$$D &(D " " bqb !W , ,1M1M$2D !$$$$^g^v^x^x$$$D &(D " "$(D !#u#u#u#uZcZrZtZt#u#u#uD %_%_%_%_T=T=T=V=V=\=\=^=^%_%_%_D "9&=wyRjlp?q?qrr    %hhjj1   %%+2244 0 0G!))'22 0 0##AAa"gJJ//// 0-...ccccSbccc  & ( (S-=-Cq-H-H:BD  6 7uuuuY]YlYrYrYtYtuuu!005AA&*&9&9,&N&N#YXt0L0LMM s?I I I cB|js|j |j|jkr|jttdd}|tj|krt j|r|S|j j |j j }}|jdkr||fdkr|t j |fdd |d ||fDD]%}t j|r|cS&dS|jS)z>Try to get the system executable by just looking at propertiesN_base_executableposix)rK cPg|]"}tj|#Sr)rr*join)r0exebase_dirs rr4z:PythonInfo._fast_get_system_executable..s9444$'!# Xs ; ;444rzpython{} python{}.{})r:r9r8rtrirurr*existsror r dirnameformatrv)rHbase_executabler r rs @rrwz&PythonInfo._fast_get_system_executablesE      (T-=-L-L'")#/A4"H"H".~887>>/::3#22(,'8'>@Q@Wu7g--5%.G2K2K')w'G'GH4444,6,=,=e,D,DmFZFZ[`bgFhFh+i444;;$&7>>/#B#B!;+:$:$:$:!;4''rc&|j|}|s|j|j|j|jffd|jD}||| tj }|S)Nc(i|]\}}||vrdn|Sr\r)r0rSr&prefixess rrIz+PythonInfo.install_path..s+```DAq!1==RRa```r) config_var) rrr8r<r9r;rrrlstriprsep)rHkeyresultrrs @r install_pathzPythonInfo.install_paths'++C00 >{D$4d6FH]]H````DDWD]D]D_D_```J(((DDKKBFSSF rcbtj5tjd ddlm}ddlm}n#t$ricYcdddSwxYw dddn #1swxYwY|ddi}ttdr dt_ tj5tjd| dd dddn #1swxYwYtj_fd |D}|S) Nignorer)dist) SCHEME_KEYS script_argsz --no-user-cfg _frameworkinstallT)createc i|]K}|td|ddtjLS)z install_{}rXN)rtrrrr)r0rr1s rrIz1PythonInfo._distutils_install..sMhhhUX#<#6#6s#;#;< ? ? 3 % % "!CN  $ & & : :  !( + + +!!)D!99A : : : : : : : : : : : : : : :6 hhhh\ghhh sCA# 8A# AA#AA##A'*A'9,C11C58C5cZdd|jddDS)N.c34K|]}t|VdSr)strr0r1s rr2z)PythonInfo.version_str..(??1A??????rrrKrrorHs r version_strzPythonInfo.version_str/xx??(9!A#(>??????rcZdd|jddDS)Nrc34K|]}t|VdSr)rrs rr2z1PythonInfo.version_release_str..rrrrJrrs rversion_release_strzPythonInfo.version_release_strrrcP|j}d|j|jS)Nr)rorr r )rHros r python_namezPythonInfo.python_names&( ##L$6 8JKKKrc|jduSr))r:rs ris_old_virtualenvzPythonInfo.is_old_virtualenvst++rc4|jduo|jjdkS)NrK)r9ror rs ris_venvzPythonInfo.is_venvs t+L0A0G10LLrNc|j|}||j}n0|j}|||}|jdi|d|S)N/r)rrcopyupdaterreplace)rHrrrpatternbases rrzPythonInfo.sysconfig_pathsr&s+  ,JJ&++--D KK # # #Jw~++ ++33C===rFcf|j|dur ddlm}|||_|jS)NTr)CreatorSelector)rvirtualenv.run.plugin.creatorsrfor_interpreter)rHrefreshrs rcreatorszPythonInfo.creatorssA > !W__ F F F F F F,<.s; q q qTQPQQq||DK'@'@G##a q q qrheaders) rrrrr*rrr8rr)rHr*fallbacks` rsystem_includezPythonInfo.system_includes""  q q q qUYUhUnUnUpUp q q q  w~~d## w||DKARARS\A]A]1^1^__Hw~~h''  rc,|jp |jp|jSr))r:r9r8rs rrczPythonInfo.system_prefixsB4#3Bt{Brc,|jp |jp|jSr))r:r;r<rs rsystem_exec_prefixzPythonInfo.system_exec_prefixsL4#8LD. s/ M M Mda1<<;L;L MQ M M Mr)r __class____name____dict__rrs r__repr__zPythonInfo.__repr__sA  N # M Mdm1133 M M M   rcd|jjddd|jf|j|j|jkrdnd|jf|j|jkr|j|jkrdnd|jfd|jfd|jfd t|j fd d |j |j ffD}|S) Nz{}({})z, c3LK|]\}}|d||V dS)Nz{}={})rrs rr2z%PythonInfo.__str__..sFAq,=/q!$$.!===1rspecsystemoriginalrrjrrencoding_fs_ioz{}-{}) rrrrrrxrurvrjrrrr}rrs r__str__zPythonInfo.__str__s// N # IITY' 1=$BX\`\kBkBk!!. !48NNN $ 8DO K K# "0DO,/T\ 2 23%w~~d6OQUQe'f'fg)    :rcd|jdd|jD|jS)Nz{}{}-{}rc34K|]}t|VdSr)rrs rr2z"PythonInfo.spec..0s(=`=`c!ff=`=`=`=`=`=`r)rrlrrorprs rrzPythonInfo.spec.s? 3SXX=`=`dN_=`=`=`5`5`bfbstttrcZddlm}|||jdS)Nr)clear)#virtualenv.discovery.cached_py_infor_cache_exe_discovery)clsapp_datars r clear_cachezPythonInfo.clear_cache2s> >===== h  &&(((((rc|jr|jtj|jkrdS|jstj|j}|j}tjdkrOtj |\}}| |r|dt| }||krdS|r=|j 6|j |j krdS|j|j|jkrdSt|jdd|j|j|jfD]\}}| | ||krdSdS)zWcheck if a given specification can be satisfied by the this python interpreter instanceTwin32NFrrK)r*rurr+is_absbasenamervrirjsplitextendswithlenrlrrpzipror r r )rHrimpl_must_matchr  spec_pathsuffixourreqs r satisfieszPythonInfo.satisfies:sk 9 !"'//$)"<"<<<t; !7++D,DEE I <7**')w'7'7'A'A$Hf ))&11>$-nV n$= y(( 5  ".43F3L3L3N3NRVReRkRkRmRm3m3mu   (T->$BS-S-S5D-ac2TZTZ4XYY  HC3?sczzuutrcn|j(|tj|dd|_|jS) This locates the current host interpreter information. This might be different than what we run into in case the host python has been upgraded from underneath us. NTFraise_on_errorresolve_to_host)_currentfrom_exerirurrs rcurrentzPythonInfo.currentYs3 < <<QUgl<mmCL|rcn|j(|tj|dd|_|jS)rNTr)_current_systemrrirurs rcurrent_systemzPythonInfo.current_systemcs6   &"%,,s~xX\nr,"s"sC ""rcRtj|dS)NrJ)indent)jsondumps_to_dictrs r_to_jsonzPythonInfo._to_jsonmsz$--//!4444rcxfdtD}|d|d<|S)Nc>i|]}||dvrt|ndS))rN)rt)r0varrHs rrIz'PythonInfo._to_dict..rs5gggUXC~,E,EgdC(((4gggrro)vars_asdict)rHdatas` rr&zPythonInfo._to_dictqsFgggg\`ae\f\fggg#N3;;==^ rTc"ddlm}| tjn|}|||||||}t |t rR|rP |||}n8#t$r+} |r| tj d|j | d}Yd} ~ nd} ~ wwxYw|S)z8Given a path to an executable get the python informationr)rN)envr ignore_cachez-ignore %s due cannot resolve system due to %r) rrrrr"r_resolve_to_system Exceptionlogginginforv) rrrrr0rr/rproposed exceptions rrzPythonInfo.from_exews A@@@@@KbjjS8C3Ceqrrr h + +   #66xJJ   !$#O LhNjluvvv  sA B !!BB cxtj|}||Sr))r$loads _from_dictr)rpayloadraws r _from_jsonzPythonInfo._from_jsons-j!!~~chhjj)))rcvtdi|d|d<|}||_|S)Nror)rrr)rr-rs rr9zPythonInfo._from_dicts>*BBT.-ABB^))++ rc|j}t}|j$|jp |jp|j}||vrt |dkr"tjd||j|_nt| dD]\}\}}tj d||| tj dt |dz||td d||||<|||d}|j$|j|jkr||j|}||_|S) NrXz$%r links back to itself via prefixes)startz%d: prefix=%s, info=%rz prefixes are causing a circle {}|F)r8exact)rurrxr:r9r8rr3r4 enumeratererror RuntimeErrorrrkeys discover_exer) rrtargetstart_executablerr8atpts rr1zPythonInfo._resolve_to_systemsy!,==&.'N6+=NF!!x==A%%L!GPPP/5/@F,"+HNN,<,> KbjjS&  F&  xujRUVV#59D-c2KKKKK$ E>>j>++J==Djoo&677G-1D %c * Mbdhjq r r rK)00.1I1I2:??[kKlKlmm3rctj||}tj|sdS|||dd|}|dSdD]} t || } t || } | | kr~| dkr>dd| Ddd| D} } |j} tjd| | | | |dur| |n|SdS) NF)rrr/)rlrprororc34K|]}t|VdSr)rrs rr2z(PythonInfo._check_exe..s(.E.E!s1vv.E.E.E.E.E.Erc34K|]}t|VdSr)rrs rr2z(PythonInfo._check_exe..s-OiOi[\PSTUPVPVOiOiOiOiOiOirz2refused interpreter %s because %s differs %s != %s) rr*rrrrtrur3rMappend) rHrrUrsrArTr/exe_pathr4itemfoundsearchedrus rrPzPythonInfo._check_exes37<<--w~~h'' 4}}XxW\be}ff <4F  DD$''EtT**H  >))&)hh.E.Eu.E.E.E&E&EsxxOiOi`hOiOiOiGiGi8E!_  RT^`dfkmuvvvE>>%%d+++!KtrcFfd}t||d}|d}|S)Nc|jjk|jjjjk|jjjjk|jjk|jjjjk|jjjjk|jjjjkg}tdtt|D}|S)Nc3.K|]\}}|rd|zndVdS)rXrNr)r0posmatchs rr2zBPythonInfo._select_most_likely..sort_by..s3ee*#u4AHH1eeeeeer) rlror r rpr r r sumrBreversed)r4matchespriorityrGs rsort_byz/PythonInfo._select_most_likely..sort_bys#v'<<!'6+>+DD!'6+>+DD!V%88!'6+>+DD!.&2E2RR!(F,?,FFGee RZ[bRcRcHdHdeeeeeHOrT)rreverser)sorted)rTrGrisorted_discovered most_likelys ` rrQzPythonInfo._select_most_likelysC     #:7DIII'* rcNt}t}d|tj|j<d||j<d|tj|j<d||j<|D]p}tj|}||j r5|t|j d}d|d ||<qd||<d|DS)Nz{}{}cPg|]#}tj|!|$Sr)rr*rrs rr4z5PythonInfo._find_possible_folders..s+HHHabgnnQ6G6GHHHHr) rrr*realpathrurvrErrbr8rr)rH inside_foldercandidate_folder executablesrrrelatives rrOz!PythonInfo._find_possible_folderss&==!mm 9= BG$$T_556'+ DO$BF BG$$T%=>>?04 D,-##%% P PC7??3''Dt{++ PDK 0 0 2 23KO }h!G!GH+/'HH+0022HHHHrc |t}|D]y}dD]t}dd|jd|D}d|jdfD])}t D]}d||||}d||< *uzt|S)N)rKrJrXrrc34K|]}t|VdSr)rrs rr2z6PythonInfo._find_possible_exe_names.. s("J"Ja3q66"J"J"J"J"J"Jrz-{}rz{}{}{}{}) r_possible_baserrorrp EXTENSIONSrrE)rHname_candidatersrIrrarchext candidates rrNz#PythonInfo._find_possible_exe_names s$'')) 9 9D" 9 9(("J"J43DSbS3I"J"J"JJJ"\\$*;<>>>  X CCXCMMXM    @uuXu))[)8OH[###[#555 [$**[* [ [,    4,\,III$ + + +     rr__main__rXrrY)"r __future__rrr$r3rrjrerirEr collectionsrrstringrrrrxcompilerobjectrrargvr start_cookie end_cookier'r4r~writerrrrrs 76666666   ////////j(](](]^^ fff" ! # # rz*%% I I I I I I I I X z 8ABB