§ À•¿jä_ãó.—ddlmZddlmZddlmZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddl mZddlmZmZmZmZd d lmZmZd d lmZmZddlZdd lmZdd lmZdZdZdZ dZ!dZ"dZ#dZ$Gd„de%¦«Z&dd„Z'dd„Z(dd„Z)dd„Z*dS)é)Úprint_function)Úabsolute_import)ÚdivisionN)Údatetime)Údrop_privileges)Ú get_directory)Ú check_callÚ check_outputÚ list_dirsÚ run_commandé)ÚEXTENSION_PATTERNÚ ExtensionInfo)Ú InterpreterÚ interpreters)ÚJSONDecodeError)ÚClSelectExceptÚ virtualenvz.virtualenv.backupz#/opt/cloudlinux/venv/bin/virtualenvú#z/usr/share/l.v.e-manager/utilsÚpython_wrapperzset_env_vars.pycó²—eZdZdd„Zd„Zd„Zdd„Zdd„Zdd„Zd „Z d d „Z dd „Z d „Z d„Z d„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zdd„Zdd„Zd!d„Zdd„Zd„ZdS)"Ú EnvironmentNcóš—||_|r||_n/tjt j¦«¦«j|_tj|j¦«j|_ tj   |j d¦«|_ |€ t|_n||_tj   t|j|j¦«|¦«|_ tj   t|jt ¦«|j¦«|_d|_d|_d|_d|z|_ddi|_dS)Nz .pip/pip.logÚpythonÚMySQLdbz MySQL-python)ÚnameÚuserÚpwdÚgetpwuidÚosÚgetuidÚpw_nameÚgetpwnamÚpw_dirÚhomepathÚpathÚjoinÚ pip_logfileÚDEFAULT_PREFIXÚprefixÚ _abs_prefixÚ BACKUP_PREFIXÚ backup_pathÚ _requirementsÚ _interpreterÚ_pipÚinterpreter_nameÚ_extension_remap)Úselfrrr*s ú_/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/clselectpythonuser/environments.pyÚ__init__zEnvironment.__init__+sÿ€ØˆŒ Ø ð :؈DŒIˆIåœ ¥R¤Y¡[¤[Ñ1Ô1Ô9ˆDŒIÝœ  T¤YÑ/Ô/Ô6ˆŒ Ýœ7Ÿ<š<¨¬ °~ÑFÔFˆÔØ ˆ>Ý(ˆDŒKˆKà ˆDŒKÝ”G—L’L¥¨T¬Y¸¼ Ñ!DÔ!DÀdÑKÔKˆŒ Ýœ7Ÿ<š<Ý ˜œ ¥=Ñ 1Ô 1°4´9ñ>ô>ˆÔà!ˆÔØ ˆÔ؈Œ Ø (¨4¡ˆÔà!*¨NÐ ;ˆÔÐÐóc ój—|jj›d|jj›d|j›d|j›d|j›d� S)Nú.z(name='z ', user='z ', prefix='z'))Ú __class__Ú __module__Ú__name__rrr*©r3s r4Ú__repr__zEnvironment.__repr__As@€à ŒNÔ %Ð %Ð % t¤~Ô'>Ð'>Ð'>Ø ŒIˆIˆI�t”y�y�y $¤+ + +ð/ð 0r6cóH‡‡—tj‰j¦«Šˆˆfd„}|S)Ncó•—tj¦«dkrtjg¦«tj‰j¦«tj‰j¦«‰jtjd<‰j tjd<dS)NrÚUSERÚHOME) r ÚgeteuidÚ setgroupsÚsetgidÚpw_gidÚsetuidÚpw_uidrÚenvironr$)r3Úuser_pwds€€r4Úfuncz!Environment._demote..funcIslø€õ Œz‰|Œ|˜qÒ Ð Ý” ˜RÑ Ô Ð Ý ŒI�h”oÑ &Ô &Ð &Ý ŒI�h”oÑ &Ô &Ð &Ø!%¤�BŒJ�vÑ Ø!)¤�BŒJ�vÑ Ð Ð r6)rr#r)r3rJrIs` @r4Ú_demotezEnvironment._demoteFs:øø€Ý”< ¤ Ñ*Ô*ˆð 1ð 1ð 1ð 1ð 1ð 1ðˆ r6có’—|j| ¦«| ¦«dœ}|r||=t||¦«|iS|S)N)rÚ interpreterÚ extensions)rrMrNÚgetattr)r3ÚkeyÚes r4Úas_dictzEnvironment.as_dictWsZ€à”IØ×+Ò+Ñ-Ô-ØŸ/š/Ñ+Ô+ð ð ˆð ð +Ø�#�ݘD #Ñ&Ô&¨Ð*Ð *؈r6Tcóæ—|j| ¦« ¦«dœ}|r)| d| ¦«i¦«|r||=t ||¦«|iS|S)N)rrMrN)rrMrRÚupdaterNrO)r3rPÚwith_extensionsrQs r4Ú as_deepdictzEnvironment.as_deepdictbs�€à”IØ×+Ò+Ñ-Ô-×5Ò5Ñ7Ô7ð ð ˆð ð Ø �HŠHؘdŸošoÑ/Ô/ðñ ô ð ð ð +Ø�#�ݘD #Ñ&Ô&¨Ð*Ð *؈r6cóæ—|st|j¬¦«}|j}|r tj ||¦«}d t tj |j¦«¦«|j ¦«}td|d|j |g}|  ¦«|j |dœ} t|i|¤Žn»#tj$r©}t#|¦«}d} d|vrd} nvd|vrp| d | d ¦«d z¦«} |d| … d ¦«} | d ks| d kr|} n|d| …} || d zd…} n|} tj| | ¬ ¦«‚d}~wwxYwtj¦«dkrCt+|j¦«5| ¦«ddd¦«dS#1swxYwYdS| ¦«dS)N)Ú target_userz({}:{})z--promptz--python)Ú preexec_fnÚcwdÚwaitzDisk quota exceededzJDisk quota exceeded. Contact system administrator to increase disk quota.Ú Tracebackú:r ú éÿÿÿÿ)ÚmessageÚdetailsr)rrr&r r'ÚformatrÚbasenamer*rÚVIRTUALENV_BINÚbinaryrKr%r rÚExternalProgramFailedÚstrÚfindÚrfindrBrÚconfigure_environment) r3rMÚversionr[r&ÚpromptÚargsÚkwargsÚerrÚ err_traceÚerr_textÚerr_charÚ err_trace_ends r4ÚcreatezEnvironment.createpso€Øð =Ý%°$´)Ð<Ñ<Ô<ˆKØŒyˆØ ð /Ý”7—<’<  gÑ.Ô.ˆDØ×!Ò!Ý �"œ'×*Ò*¨4¬;Ñ7Ô7Ñ 8Ô 8¸$¼)ñ ô ˆõ Ø ˜Ø ˜ Ô*Ø ð  ˆð !%§ ¢ ¡¤°t´}ÈdÐSÐSˆð Ý ˜Ð ' Ð 'Ð 'Ð 'Ð 'øÝÔ3ð ð ð Ý�c‘(”(ˆC؈Ià$¨Ð+Ð+ðR��à Ð#Ð#àŸ8š8 C¨¯ª°#©¬°q©Ñ9Ô9�à # I X I¤× 4Ò 4°TÑ :Ô :� Ø  BÒ&Ð&¨(°bª.¨.Ø"�H�Hð!$ N ] NÔ 3�Ià" =°¡?Ð#3Ð#3Ô4�H�Hà�Ý Ô6Ø Ø!ðñôð øøøøð+ øøøõF Œ:‰<Œ<˜1Ò Ð Ý  ¤Ñ+Ô+ð -ð -Ø×*Ò*Ñ,Ô,Ð,ð -ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð -ð -ð × &Ò &Ñ (Ô (Ð (Ð (Ð (s+Â; CÃFÃB$E;Å;FÆ.GÇGÇGcó4—d|j d¦«d|jg}|D]l}tj ||¦«}tj |¦«r'tj|¦« d¦«r|cSŒmdS)Nrr8rú/opt/alt/python)r1Úsplitr r&r'ÚislinkÚreadlinkÚ startswith)r3Úbin_pathÚfiles_to_checkÚfiler&s r4Údetect_python_binaryz Environment.detect_python_binary«sš€à Ø Ô !× 'Ò '¨Ñ ,Ô ,¨QÔ /Ø Ô !ð ˆð #ð ð ˆDÝ”7—<’< ¨$Ñ/Ô/ˆDÝ”7—>’> $Ñ'Ô'ð ­2¬;°tÑ+<Ô+<×+GÒ+GÐHYÑ+ZÔ+Zð Ø� � � ð àˆtr6FcóÀ—tj |jd¦«}tj ||j¦«dz}| |¦«}|€dStj |¦«rtj|¦«tj||¦« tj |¦«s=tjtj tt¦«|¦«n-#ttf$r|rtj||¦«‚wxYwtj tj |t¦«¦«sbtjtj tt¦«tj |t¦«¦«dSdS)z‘ Configures environment: 1. Rename binary to pythonX.Y_bin 2. Makes symlink from python binary to python_wrapper ÚbinÚ_binN)r r&r'r1r~ÚexistsÚremoveÚrenameÚsymlinkÚ WRAPPERS_PATHÚPYTHON_WRAPPERÚIOErrorÚOSErrorÚSET_ENV_VARS_SCRIPT)r3Ú auto_restorer{Únew_interpreter_pathÚinterpreter_paths r4rjz!Environment.configure_environment·s•€õ ”7—<’< ¤ ¨5Ñ1Ô1ˆÝ!œwŸ|š|¨H°dÔ6KÑLÔLÈvÑUÐØ×4Ò4°XÑ>Ô>ÐØ Ð #Ø ˆFå Œ7�>Š>Ð.Ñ /Ô /ð ,Ý ŒIÐ*Ñ +Ô +Ð +å Œ Ð"Ð$8Ñ9Ô9Ð9ð Ý”7—>’>Ð"2Ñ3Ô3ð ZÝ” �2œ7Ÿ<š<­ µ~ÑFÔFÐHXÑYÔYÐYøøÝ�Ð!ð ð ð Øð BÝ” Ð.Ð0@ÑAÔAÐAØ ð øøøõ Œw�~Š~�bœgŸlšl¨8Õ5HÑIÔIÑJÔJð DÝ ŒJ•r”w—|’|¥MÕ3FÑGÔGÝ”w—|’| HÕ.AÑBÔBñ Dô Dð Dð Dð Dð Dð Ds Â0AD Ä *D7cóæ—|j}|r tj ||¦«}tj |¦«r(t ddd|| ¦«¬¦«dSdS)Nz/bin/rmú-rz--interactive=never)rY)r&r r'r‚r rK)r3rkr&s r4ÚdestroyzEnvironment.destroyÓs{€ØŒyˆØ ð /Ý”7—<’<  gÑ.Ô.ˆDÝ Œ7�>Š>˜$Ñ Ô ð 2Ý �y $Ð(=¸tØ"&§,¢,¡.¤.ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2r6có2—||jvr |j|S|S)z¦ Returns extensions name considering extension remap table :param extension_name: Input extension name :return: Result extension name )r2)r3Úextension_names r4Ú_get_extension_namezEnvironment._get_extension_nameÛs&€ð ˜TÔ2Ð 2Ð 2ØÔ(¨Ô8Ð 8à!Ð !r6cóD—tj |j|¦«}tj | |¬¦«¦«sdSt d|¦«| |¦«| |¦«}g}tj |¦«r´tj¦«dkret|j ¦«5t|d¦«}|  ¦«}|  ¦«ddd¦«n #1swxYwYn8t|d¦«}|  ¦«}|  ¦«| |¬¦«| |d¬¦«tj¦«dkrft|j ¦«5t|d¦«}| |¦«|  ¦«ddd¦«n #1swxYwYn9t|d¦«}| |¦«|  ¦«t#| |¬¦«d d | |¦«| ¦«|j¬ ¦«dS) zX Recreate python virtual environment with requirements :return: ©rkNzRe-create python virtualenv:rÚrT)rkr[ÚwÚinstallr�©rYrZ)r r&r'r‚ÚpipÚprintÚ _pip_freezeÚpip_requirementsrBrrÚopenÚ readlinesÚcloser�rtÚ writelinesr rKr%)r3rkÚenv_pathÚrequirements_pathÚ requirementsÚ reqs_files r4Ú _recreatezEnvironment._recreateæs×€õ”7—<’< ¤ ¨7Ñ3Ô3ˆÝŒw�~Š~˜dŸhšh¨w˜hÑ7Ô7Ñ8Ô8ð Ø ˆFÝ Ð,¨hÑ7Ô7Ð7à ×Ò˜Ñ!Ô!Ð!ð!×1Ò1°'Ñ:Ô:ÐØˆ Ý Œ7�>Š>Ð+Ñ ,Ô ,ð "ÝŒz‰|Œ|˜qÒ Ð Ý$ T¤YÑ/Ô/ð&ð&Ý $Ð%6¸Ñ <Ô <�IØ#,×#6Ò#6Ñ#8Ô#8�LØ—O’OÑ%Ô%Ð%ð&ð&ð&ñ&ô&ð&ð&ð&ð&ð&ð&øøøð&ð&ð&ð&øõ !Ð!2°CÑ8Ô8� Ø(×2Ò2Ñ4Ô4� Ø—’Ñ!Ô!Ð!à � Š ˜Wˆ Ñ%Ô%Ð%à � Š ˜G¨$ˆ Ñ/Ô/Ð/å Œ:‰<Œ<˜1Ò Ð Ý  ¤Ñ+Ô+ð "ð "Ý Ð!2°CÑ8Ô8� Ø×$Ò$ \Ñ2Ô2Ð2Ø—’Ñ!Ô!Ð!ð "ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "øõ Ð.°Ñ4Ô4ˆIØ × Ò  Ñ .Ô .Ð .Ø �OŠOÑ Ô Ð åØ �HŠH˜WˆHÑ %Ô % y°$Ø × !Ò ! 'Ñ *Ô *Ø—|’|‘~”~¨4¬=ð :ñ :ô :ð :ð :ð :s$Ã!9D&Ä&D*Ä-D*Ç:HÈH ÈH cóz—td¬¦« ¦«D]}| |¦«ŒdS)Nrk©rP)rÚkeysr¦©r3rks r4ÚrecreatezEnvironment.recreatesG€Ý#¨ Ð2Ñ2Ô2×7Ò7Ñ9Ô9ð $ð $ˆGØ �NŠN˜7Ñ #Ô #Ð #Ð #ð $ð $r6cóJ—tj |j¦«S©N)r r&r‚r<s r4r‚zEnvironment.existss€ÝŒw�~Š~˜dœiÑ(Ô(Ð(r6có^—|js t|j|j¬¦«|_|jS)N)r*rX)r/rr&rr<s r4rMzEnvironment.interpreter s0€ØÔ ð UÝ +°4´9È$Ì)Ð TÑ TÔ TˆDÔ ØÔ Ð r6có*—| |¦«}tj|j¦«}| t ¦«}|d|dd…pd}}|r/|d}| ¦«d|jzd|dz|zf}n | ¦«d|jzd|f}tj|||¦«rtd|z¦«‚t||  ¦«|j ¬¦«|  ¦«dS) Nrr Úú --log-file=r˜z==z6Extension '%s' install is prohibited. System extension©rmrYrZ)r“rÚget_locked_extensionsr1rwÚVERSION_DELIMITERršr(Úis_extensions_lockedÚ ValueErrorr rKr%rœ)r3r’Úlocked_extensionsÚtÚ extensionrkÚcommands r4Úextension_installzEnvironment.extension_install%s€Ø×1Ò1°.ÑAÔAˆÝ)Ô?ÀÔ@UÑVÔVÐØ × Ò Õ!2Ñ 3Ô 3ˆØ˜qœT 1 Q R R¤5 ;¨B�7ˆ Ø ð 2ؘa”jˆGØ—x’x‘z”z =°4Ô3CÑ#CØ  )¨dÑ"2°WÑ"<ð>ˆGˆGð—x’x‘z”z =°4Ô3CÑ#CØ  .ð2ˆGõ Ô -Ð.?ÀÈGÑ TÔ Tð hÝÐUÐXfÑfÑgÔgÐ gݘ¨D¯LªL©N¬NÀÄ ÐNÑNÔNÐNØ ×ÒÑÔÐÐÐr6có—| ¦«d|jzdd|f}t|| ¦«|j¬¦«| ¦«dS)Nr±r˜r�r²)ršr(r rKr%rœ)r3r£rºs r4Úextension_install_requirementsz*Environment.extension_install_requirements9s]€Ø—8’8‘:”:˜}¨tÔ/?Ñ?ؘdÐ$5ð7ˆå˜¨D¯LªL©N¬NÀÄ ÐNÑNÔNÐNØ ×ÒÑÔÐÐÐr6c óØ—| |¦«}tj|j¦«}| t ¦«}|d|dd…pd}}|r|d}tj|||¦«rtd|z¦«‚t|  ¦«d|j zdd||  ¦«|j ¬¦«|  ¦«dS) Nrr r°z5Extension '%s' update is prohibited. System extensionr±r˜z --upgrader™)r“rr³r1rwr´rµr¶r ršr(rKr%rœ)r3r¹r·r¸Ú base_namerks r4Úextension_updatezEnvironment.extension_update?sô€ð×,Ò,¨YÑ7Ô7ˆ Ý)Ô?ÀÔ@UÑVÔVÐØ �OŠOÕ-Ñ .Ô .ˆØ˜qœT 1 Q R R¤5 ;¨B�7ˆ Ø ð !ؘa”jˆGÝ Ô -Ð.?ÀÈGÑ TÔ Tð bÝÐTÐW`Ñ`ÑaÔaÐ aÝ�4—8’8‘:”:˜}¨TÔ-=Ñ=ؘk¨9Ø"Ÿlšl™nœn°$´-ð Añ Aô Að Að ×ÒÑÔÐÐÐr6c ó\—tj|j¦«}| t¦«}|d|dd…pd}}|r|d}tj|||¦«rt d|z¦«‚tj|  ¦«d|j zd|f|  ¦«tj tj tj |j d¬¦«}| d ¦«\}}|jrt!|p|¦«‚| ¦«dS) Nrr r°z$Extension '%s' removal is prohibitedr±Ú uninstallT)rYÚstdinÚstderrÚstdoutrZÚtextÚy)rr³r1rwr´rµr¶Ú subprocessÚPopenršr(rKÚPIPEr%Ú communicateÚ returncodeÚ Exceptionrœ)r3r¹r·r¸rkÚprÅrÄs r4Úextension_uninstallzEnvironment.extension_uninstallPs$€Ý)Ô?ÀÔ@UÑVÔVÐØ �OŠOÕ-Ñ .Ô .ˆØ˜qœT 1 Q R R¤5 ;¨B�7ˆ Ø ð !ؘa”jˆGÝ Ô -Ð.?ÀÈGÑ TÔ Tð QÝÐCÀiÑOÑPÔPÐ PÝ Ô Ø �XŠX‰ZŒZ˜ tÔ'7Ñ7¸ÀiÐ PÐ]a×]iÒ]iÑ]kÔ]kÝ”/­*¬/Ý”?¨¬ ¸Dð Bñ Bô BˆðŸš sÑ+Ô+‰ˆ�Ø Œ<ð .ݘFÐ, fÑ-Ô-Ð -Ø ×ÒÑÔÐÐÐr6c óð—i}tj|j¦«} t| ¦«dd|jzd| ¦«|j¬¦«}d„tj |¦«D¦«}nŒ#ttttjtjf$r\t| ¦«dd|jz| ¦«|j¬¦«}t!j|¦«}YnwxYwd„|D¦«}t%||¦«D]Ë\\}}}tj|||¦«r¥tj|¦«} | | ¦«pg} t-t/d„| d¦«D¦«¦«t/| ¦«z ¦«} | r.t3| ¦«d kr|d  | ¦«d œ||<ŒÃ||d œ||<ŒÌ|S) NÚlistr±z --format=jsonr™có.—g|]}|d|df‘ŒS)rrk©)Ú.0Úxs r4ú z*Environment.extensions..fs%€ÐPÐPÐP¸˜1˜Vœ9 a¨ ¤lÐ3ÐPÐPÐPr6c3ó^K—|](\}}t¦« |¦«V—Œ)dSr­)rÚ extension_doc)rÔr¹Ú_s r4ú z)Environment.extensions..jsLèè€ð0ð0Ù �I˜qõ‘”×-Ò-¨iÑ8Ô8ð0ð0ð0ð0ð0ð0r6có6—g|]}| ¦«‘ŒSrÓ)Ústrip)rÔÚvs r4rÖz*Environment.extensions..us €Ð(OÐ(OÐ(O°q¨¯ª©¬Ð(OÐ(OÐ(Or6ú,rz, )Údocrk)rr³r1r ršr(rKr%ÚjsonÚloadsrÚKeyErrorr¶rÚFileProcessErrorrfrÚfindallÚziprµÚ_canonicalise_extension_nameÚgetrÑÚsetrwÚlenr') r3Úresultr·ÚoutputrNÚdocsrrkrßÚ lookup_keyÚlocked_versionsÚ version_diffs r4rNzEnvironment.extensionsas5€ØˆÝ)Ô?ÀÔ@UÑVÔVÐð ;Ý! $§(¢(¡*¤*¨f°mÀDÔDTÑ6TÐVeÐrv×r~Òr~ñsAôsAðGKôGTðUñUôUˆFØPÐP½T¼ZÈÑ=OÔ=OÐPÑPÔPˆJˆJøÝ¥­:µ~Ô7VÕXfÔX|Ð}ð ;ð ;ð ;Ý! $§(¢(¡*¤*¨f°mÀDÔDTÑ6TÐae×amÒamÑaoÔaoÐuyôvCðDñDôDˆFÝ*Ô2°6Ñ:Ô:ˆJˆJˆJð ;øøøð0ð0Ø$.ð0ñ0ô0ˆå$'¨ °DÑ$9Ô$9ð @ð @Ñ ‰OˆT�7˜SÝÔ1Ð2CÀTÈ7ÑSÔSð @õ +ÔGÈÑMÔM� Ø"3×"7Ò"7¸ Ñ"CÔ"CÐ"IÀr�Ý#¥CÐ(OÐ(O¸G¿MºMÈ#ÑÝœŸ š  T¤Y°°uÑ=Ô=ˆDŒIØŒyÐr6cóœ—|�&tj |j|d¦«Stj |jd¦«S)Nzrequirement.pip)r r&r'rªs r4r�zEnvironment.pip_requirements…s<€Ø Ð Ý”7—<’< ¤ ¨7Ð4EÑFÔFÐ FÝŒw�|Š|˜DœIÐ'8Ñ9Ô9Ð9r6cód—d}| ¦«}|r||j}ntd¬¦«|j}t¦«}tj |j¦«r?t j|j¦«  d¦«r|rtd¦«dS|jdtj ¦«  d¦«zz} t j|jtjtjz¦«} t j| ¦«} t j| tjtjztjztjzd¦«} t j| | j| j¦«t j| | jd z¦«t j| d d¬ ¦«5} t j| d d¬ ¦«5}t7j| |¦«d d d ¦«n #1swxYwYd d d ¦«n #1swxYwYt j| ¦«n#t j| ¦«wxYw t j| ¦«n#t j| ¦«wxYw |jD]¤}t?j |j!|j¦«r|sd}|rtd|z¦«Œ:|r+tDj# $d|j!›d|›d�¦«tKdd|j!|f¬¦«| &|¦«td¦«Œ¥d}nk#tNtPf$rW}tdtS|¦«z¦«|D]}t7j*| |¦«Œt j+| ¦«Yd }~nd }~wwxYw|st j+| ¦«|S)a_ copy binary python from /opt/alt/pythonXY/bin/pythonX.Y to virtualenvdir/bin/pythonX.Y :param backup: make backup old python interpreter :param force: force rewrite python interpreter without check :param verbose: print actions details to stdout :return: True - updating success; False - updating fail Frkr¨rvzVNothing to do, binary in your virtual environment is already symlink to global python!z.orig_%sz%Y-%m-%d_%H-%M-%S-%fi€iÿÚrb)ÚclosefdÚwbNz not need updating; skip '%s'z copy 'z' -> 'z'...z/bin/cpz--force)ÚcmdÚDoneTzFail %s),rMrkrrÑr r&rxÚ python_binryrzr›rÚnowÚstrftimeržÚO_RDONLYÚ O_NOFOLLOWÚfstatÚO_WRONLYÚO_CREATÚO_EXCLÚfchownÚst_uidÚst_gidÚfchmodÚst_modeÚfdopenÚshutilÚ copyfileobjr Ú binary_listÚfilecmpÚcmpreÚsysrÅÚwriter Úappendr‰rˆrgÚcopyfileÚunlink)r3ÚbackupÚforceÚverboseÚ_alt_interpreters_dictÚ update_resultrMÚmain_interpreterÚ updated_listÚ python_backupÚsrc_fdÚstat_Údst_fdÚsrcÚdstÚvirtualenv_python_binrQÚupdated_pythons r4Úupdate_python_interpreterz%Environment.update_python_interpreterŠs/€ðˆ Ø×&Ò&Ñ(Ô(ˆ Ø !ð PØ5°kÔ6IÔJÐ Ð å+° Ð:Ñ:Ô:¸;Ô;NÔOÐ å‘v”vˆ å Œ7�>Š>˜+Ô0Ñ 1Ô 1ð µb´kÀ+ÔBXÑ6YÔ6Y×6dÒ6dÐevÑ6wÔ6wð Øð pÝÐnÑoÔoÐoØ�5ðJ$Ô.°½h¼l¹n¼n×>UÒ>UÐVlÑ>mÔ>mÑ1mÑmˆ Ý”˜Ô/µ´½r¼}Ñ1LÑMÔMˆð Ý”H˜VÑ$Ô$ˆEÝ”WØÝ” �bœjÑ(­2¬9Ñ4µr´}ÑDØñôˆFð  !Ý” ˜& %¤,°´ Ñ=Ô=Ð=Ý” ˜& %¤-°&Ñ"8Ñ9Ô9Ð9Ý”Y˜v t°UÐ;Ñ;Ô;ð1¸sÝœ  &¨$¸Ð>Ñ>Ô>ð1ØBEÝÔ& s¨CÑ0Ô0Ð0ð1ð1ð1ñ1ô1ð1ð1ð1ð1ð1ð1øøøð1ð1ð1ð1ð1ð1ð1ñ1ô1ð1ð1ð1ð1ð1ð1øøøð1ð1ð1ð1õ”˜Ñ Ô Ð Ð ø•”˜Ñ Ô Ð Ð øøøÐ å ŒH�VÑ Ô Ð Ð ø�BŒH�VÑ Ô Ð Ð øøøð %Ø)4Ô)@ð ð Ð%Ý”;Ð/Ô6¸ Ô8NÑOÔOðÐX]ðØ$)�MØðZÝÐ@ÐCXÑXÑYÔYÐYØàðtÝ”J×$Ò$Ð$ÐCSÔCZÐCZÐCZÐ\qÐ\qÐ\qÐ%rÑsÔsÐsÝ ¨IÐ7GÔ7NÐPeÐ fÐgÑgÔgÐgØ×#Ò#Ð$9Ñ:Ô:Ð:Ý�f‘ ” � � Ø ˆMˆMøÝ�Ð!ð %ð %ð %å �)�c !™fœfÑ$Ñ %Ô %Ð %Ø".ð ?ð ?�Ý”  ¨~Ñ>Ô>Ð>Ð>Ý ŒI�mÑ $Ô $Ð $Ð $Ð $Ð $Ð $Ð $øøøøð  %øøøð ð %Ý ŒI�mÑ $Ô $Ð $ØÐsˆÄAI&Å2AH7ÇHÇHÇ4 HÈH ÈHÈH ÈHÈ H7ÈHÈH7ÈHÈH7È"I&È7I É I&É&I<ÊB.L/Ì/NÍA NÎNcó—tj | |¦«¦«sdS| |¦«ddf}tj¦«dkrPt |j¦«5t| |¦«d¦«}ddd¦«n #1swxYwYn#t| |¦«d¦«}t||  ¦«|j |¬¦«dS)úX Output installed packages in requirements format :return: None NÚfreezez-lrr—)rmrYrZrë) r r&r‚ršrBrrržr�r rKr%)r3rkrºÚfs r4rœzEnvironment._pip_freezeïs,€õ Œw�~Š~˜dŸhšh wÑ/Ô/Ñ0Ô0ð Ø ˆFØ—8’8˜GÑ$Ô$ h°Ð5ˆõ Œ:‰<Œ<˜1Ò Ð Ý  ¤Ñ+Ô+ð >ð >ݘ×.Ò.¨wÑ7Ô7¸Ñ=Ô=�ð >ð >ð >ñ >ô >ð >ð >ð >ð >ð >ð >øøøð >ð >ð >ð >øõ�T×*Ò*¨7Ñ3Ô3°SÑ9Ô9ˆAݘ¨D¯LªL©N¬NØ”}¨Qð 0ñ 0ô 0ð 0ð 0ð 0sÁ8$B(Â(B,Â/B,có|—td¬¦« ¦«D]}| |¬¦«ŒdS)r"rkr¨r•N)rr©rœrªs r4Ú pip_freezezEnvironment.pip_freezesN€õ $¨ Ð2Ñ2Ô2×7Ò7Ñ9Ô9ð .ð .ˆGØ × Ò  WÐ Ñ -Ô -Ð -Ð -ð .ð .r6©NNr­)NT)NNN)F)FFTN)r;r:Ú __qualname__r5r=rKrRrVrtr~rjr�r“r¦r«r‚rMr»r½rÀrÏrNršr�r rœr&rÓr6r4rr)s¹€€€€€ð<ð<ð<ð<ð,0ð0ð0ð ððð" ð ð ð ð ð ð ð ð9)ð9)ð9)ð9)ðv ð ð ðDðDðDðDð82ð2ð2ð2ð "ð "ð "ð1:ð1:ð1:ðf$ð$ð$ð)ð)ð)ð!ð!ð!ð ððð(ððð ððð"ððð"ððð:ðððð:ð:ð:ð:ð cðcðcðcðJ0ð0ð0ð0ð(.ð.ð.ð.ð.r6rcó—|st}|r7tj t j|¦«j|¦«Stj t jtj¦«¦«j|¦«Sr­) r)r r&r'rr#r$rr!)rr*s r4r+r+ sd€Ø ð ÝˆØ ðFÝŒw�|Š|�CœL¨Ñ.Ô.Ô5°vÑ>Ô>Ð>åŒw�|Š|�CœL­¬©¬Ñ5Ô5Ô<¸fÑEÔEÐEr6có—t||¦«} t|¦«}n#t$rgcYSwxYwg}|D]&}| t |||¦«¦«Œ'|Sr­)r+r r‰rr)rr*Ú venv_pathÚenv_listÚenvsÚenv_names r4Ú environmentsr/sƒ€Ý˜D &Ñ)Ô)€IðݘYÑ'Ô'ˆˆøÝ ðððØˆ ˆ ˆ ðøøøà €DØð9ð9ˆØ � Š •K ¨$°Ñ7Ô7Ñ8Ô8Ð8Ð8Ø €Ks ’"¢ 1°1cóV‡—tˆfd„t||¦«D¦«¦«S)Nc3ó‚•K—|]9}t| ‰¬¦« ¦«¦«V—Œ:dS©r¨N)rÑrRÚitems©rÔrQrPs €r4rÚz$environments_dict.."sEøèè€ÐUÐU°Q•�Q—Y’Y 3�YÑ'Ô'×-Ò-Ñ/Ô/Ñ0Ô0ÐUÐUÐUÐUÐUÐUr6©Údictr/©rPrr*s` r4Úenvironments_dictr8!s0ø€Ý ÐUÐUÐUÐU½,ÀtÈVÑ:TÔ:TÐUÑUÔUÑ UÔ UÐUr6cóV‡—tˆfd„t||¦«D¦«¦«S)Nc3ó‚•K—|]9}t| ‰¬¦« ¦«¦«V—Œ:dSr2)rÑrVr3r4s €r4rÚz(environments_deepdict..&sYøèè€ð5ð5Øõ�Q—]’] s�]Ñ+Ô+×1Ò1Ñ3Ô3Ñ4Ô4ð5ð5ð5ð5ð5ð5r6r5r7s` r4Úenvironments_deepdictr;%sEø€Ý ð5ð5ð5ð5Ý% d¨FÑ3Ô3ð5ñ5ô5ñ 5ô 5ð5r6r')+Ú __future__rrrr r rrÈrr rÚclcommon.clpwdrÚclselect.clselectctlrÚclselect.utilsr r r r rNrrrrÚ simplejsonràrÚclselect.clselectexceptrr)r,rdr´r†r‡rŠÚobjectrr+r/r8r;rÓr6r4úrCsìðð&Ð%Ð%Ð%Ð%Ð%Ø&Ð&Ð&Ð&Ð&Ð&ØÐÐÐÐÐØ € € € Ø € € € Ø € € € ØÐÐÐØ € € € Ø€€€àÐÐÐÐÐØ*Ð*Ð*Ð*Ð*Ð*Ø.Ð.Ð.Ð.Ð.Ð.ØKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKØ8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ø3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ØÐÐÐØ&Ð&Ð&Ð&Ð&Ð&Ø2Ð2Ð2Ð2Ð2Ð2Ø€Ø$€ ð 7€ØÐØ0€ Ø!€Ø'Ðð`.ð`.ð`.ð`.ð`.�&ñ`.ô`.ð`.ðFFðFðFðFð ð ð ð ðVðVðVðVð5ð5ð5ð5ð5ð5r6