B .cPÙ<¯zã @sÂddlZddlZddlZddlZddlZddlZddlZe e¡Z Gdd„dƒZ d dd„Z ddd„Z ed kr¾d Z ye ƒdZ Wn4ek r²Zzed eejd WddZ[XYnXe e ¡dS)éNc@s†eZdZddd„Zdd„Zdd„Zd d „Zd d „Zej d krHddd„Z n ddd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS) Ú EnvBuilderFNcCs(||_||_||_||_||_||_dS)N)Úsystem_site_packagesÚclearÚsymlinksÚupgradeÚwith_pipÚprompt)Úselfrrrrrr©r ú0/opt/alt/python37/lib/python3.7/venv/__init__.pyÚ__init__+s zEnvBuilder.__init__cCsxtj |¡}| |¡}|j}d|_| |¡| |¡|jrF| |¡|j s`|  |¡|  |¡|rtd|_| |¡dS)NFT) ÚosÚpathÚabspathÚensure_directoriesrÚcreate_configurationÚ setup_pythonrÚ _setup_piprÚ setup_scriptsÚ post_setup)r Úenv_dirÚcontextZtrue_system_site_packagesr r r Úcreate4s       zEnvBuilder.createcCs`xZt |¡D]L}tj ||¡}tj |¡s6tj |¡rBt |¡q tj |¡r t  |¡q WdS)N) r ÚlistdirrÚjoinÚislinkÚisfileÚremoveÚisdirÚshutilZrmtree)r rÚfnr r r Úclear_directoryNs   zEnvBuilder.clear_directorycCsœdd„}tj |¡r$|jr$| |¡t ¡}||_tj |¡d|_ |j dk rT|j n|j }d||_ ||ƒtj }t t dt jƒ}tj tj |¡¡\}}||_||_||_t jdkrÎd} d} tj |d d ¡} n(d } d } tj |d dt jdd…d ¡} tj || ¡|_} || ƒ|| ƒt jdkrftjdkrft jdkrftj |d¡} tj | ¡sft d | ¡tj || ¡|_}| |_tj ||¡|_||ƒ|S)NcSs@tj |¡st |¡n$tj |¡s0tj |¡r.create_if_neededéz(%s) Ú_base_executableÚwin32ZScriptsZIncludeÚLibz site-packagesÚbinZincludeÚlibz python%d.%délÚposixÚdarwinZlib64)r rr"rr!ÚtypesÚSimpleNamespacerÚsplitÚenv_namerÚenvironÚgetattrÚsysÚ executablerÚ python_dirZ python_exeÚplatformrÚ version_infoZinc_pathÚmaxsizeÚnameÚsymlinkÚbin_pathÚbin_nameÚenv_exe)r rr&rrÚenvr7ÚdirnameZexenameZbinnameZincpathZlibpathrZ link_pathÚbinpathr r r rVsJ      zEnvBuilder.ensure_directoriesc Csztj |jd¡|_}t|dddL}| d|j¡|jrBd}nd}| d|¡| d t j dd …¡WdQRXdS) Nz pyvenv.cfgÚwzutf-8)Úencodingz home = %s ÚtrueZfalsez"include-system-site-packages = %s zversion = %d.%d.%d é) r rrrZcfg_pathÚopenÚwriter8rr6r:)r rrÚfZinclr r r r‹s zEnvBuilder.create_configurationÚntcCs~|j }|sjy6tj |¡s@|r4t tj |¡|¡n t ||¡Wn&tk rht d||¡d}YnX|rzt   ||¡dS)NzUnable to symlink %r to %rT) rr rrr=ÚbasenameÚ ExceptionÚloggerÚwarningrÚcopyfile)r ÚsrcÚdstÚrelative_symlinks_okZ force_copyr r r Úsymlink_or_copyŸs  zEnvBuilder.symlink_or_copycCsZtj |¡otj |¡ }|jr~|s~tj |¡s~y*|rLt tj |¡|¡n t ||¡dStk r|t   d||¡YnXtj  tj |¡¡\}}tj  tj  t¡dd||¡}t d¡sÌtj |¡s"| d¡rêd|}|dd…}|dkrød}n|d krd }tj  tj  |¡||¡}n|}tj |¡sJ|sFt   d |¡dSt ||¡dS) NzUnable to symlink %r to %rÚscriptsrKTZ_déþÿÿÿÚpythonZ venvlauncherZpythonwZ venvwlauncherzUnable to copy %r)r rÚlexistsr"rrr=rLrMrNrOÚsplitextrrBÚ__file__Ú sysconfigÚis_python_buildrÚendswithrrP)r rQrRrSZbad_srcrLZextZsrcfnr r r rT²s:      cCs®|j}|j}|j}|j}tjdkrš||j|ƒtj |¡sFt  |d¡xNdD]F}tj  ||¡}tj  |¡sL||j|ddtj |¡sLt  |d¡qLWn|j rÎdd„t  |¡Dƒ}t d¡rÚdd„|Dƒ}n d d d d g}x:|D]2}tj  ||¡}tj |¡rà||tj  ||¡ƒqàWt d¡rªx†t |j¡D]v\} } } d | kr0tj | ¡} tj  |jd| ¡} tj  | ¡szt | ¡tj  | d ¡}tj  | d ¡} t || ¡Pq0WdS)NrKií)rWZpython3T)rScSs,g|]$}tj tj |¡d¡dkr|‘qS)r')z.exez.dll)r rÚnormcaserY)Ú.0rJr r r ú ûsz+EnvBuilder.setup_python..cSs"g|]}tj |¡ d¡r|‘qS))rWZ vcruntime)r rr^Ú startswith)r_rJr r r r`sz python.exez python_d.exez pythonw.exez pythonw_d.exezinit.tclr*)r>r@rTr8r r<r7rrÚchmodrr"rrr[r\rXÚwalkrLrr#rrP)r rrCrZcopierrBÚsuffixÚsuffixesrQÚrootÚdirsÚfilesZtcldirrRr r r rÝsF               zEnvBuilder.setup_pythoncCs$|jddddg}tj|tjddS)Nz-ImZ ensurepipz --upgradez --default-pip)Ústderr)r@Ú subprocessZ check_outputZSTDOUT)r rÚcmdr r r rs zEnvBuilder._setup_pipcCs2tj tj t¡¡}tj |d¡}| ||¡dS)NrU)r rrrBrZrÚinstall_scripts)r rrr r r r"s zEnvBuilder.setup_scriptscCsdS)Nr )r rr r r r1szEnvBuilder.post_setupcCsJ| d|j¡}| d|j¡}| d|j¡}| d|j¡}| d|j¡}|S)NZ __VENV_DIR__Z __VENV_NAME__Z__VENV_PROMPT__Z__VENV_BIN_NAME__Z__VENV_PYTHON__)Úreplacerr3rr?r@)r Útextrr r r Úreplace_variables;s zEnvBuilder.replace_variablesc Cs¾|j}t|ƒ}x¨t |¡D]˜\}}}||kr`x,|dd…D]}|dtjfkr>| |¡q>WqxR|D]H} tjdkrŽ|  d¡rŽ|  d¡rŽqhtj  || ¡} ||d…  tj ¡dd…} | sÂ|} ntjj |f| žŽ} tj  | ¡sêt  | ¡tj  | | ¡} t| dƒ} |  ¡}WdQRX|  d¡s~y$| d¡}| ||¡}| d¡}Wn6tk r|}zd}t d| |¡Wdd}~XYnX|dk rht| d ƒ} |  |¡WdQRXt | | ¡qhWqWdS) NÚcommonrKrW)z.exez.pdbr-Úrbzutf-8z+unable to copy script %r, may be binary: %sÚwb)r>Úlenr rcr<rrar]rrr2Úsepr"r#rHÚreadÚdecoderoÚencodeÚ UnicodeErrorrNrOrIrZcopymode)r rrrCZplenrfrgrhr%rJZsrcfilerdZdstdirZdstfileÚdataÚer r r rlMsF         zEnvBuilder.install_scripts)FFFFFN)F)F)Ú__name__Ú __module__Ú __qualname__r rr!rrr r<rTrrrrrorlr r r r rs 5   +<  rFcCs t|||||d}| |¡dS)N)rrrrr)rr)rrrrrrÚbuilderr r r r€src Csbd}tjdkrd}nttdƒs"d}|s2tdƒ‚n,ddl}|jtddd }|jd d d d d|jddddddtj dkr€d}nd}|  ¡}|jd|dddd|jd| dddd|jdddddd|jddddd d|jd!d"ddd#d$|jd%d&d'|  |¡}|j r"|j r"td(ƒ‚t|j|j |j|j |j|jd)}x|jD]}| |¡qJWdS)*NT)rGrGFÚ base_prefixz.This script is only for use with Python >= 3.3rzFCreates virtual Python environments in one or more target directories.z|Once an environment has been created, you may wish to activate it, e.g. by sourcing an activate script in its bin directory.)ÚprogÚ descriptionÚepilogrgZENV_DIRú+z)A directory to create the environment in.)ÚmetavarÚnargsÚhelpz--system-site-packagesÚ store_trueÚ system_sitezDGive the virtual environment access to the system site-packages dir.)ÚdefaultÚactionÚdestr†rKz --symlinksrz[Try to use symlinks rather than copies, when symlinks are not the default for the platform.z--copiesÚ store_falsez\Try to use copies rather than symlinks, even when symlinks are the default for the platform.z--clearrzcDelete the contents of the environment directory if it already exists, before environment creation.z --upgraderzlUpgrade the environment directory to use this version of Python, assuming Python has been upgraded in-place.z --without-piprz]Skips installing or upgrading pip in the virtual environment (pip is bootstrapped by default))r‹r‰rŠr†z--promptz;Provides an alternative prompt prefix for this environment.)r†z1you cannot supply --upgrade and --clear together.)rrrrrr)r6r:Úhasattrr$ÚargparseÚArgumentParserr{Ú add_argumentr r<Úadd_mutually_exclusive_groupÚ parse_argsrrrrˆrrrrgr) ÚargsZ compatiblerŽÚparserZ use_symlinksÚgroupÚoptionsr~r%r r r Úmainˆs\             r—Ú__main__r'z Error: %s)Úfile)FFFFN)N)Zloggingr rrjr6r[r0Z getLoggerr{rNrrr—ZrcrMrzÚprintriÚexitr r r r Ús* p  H$