3 Õì2aÛHã@sºddlZddlZddlZddlZddlZddlZejeƒZGdd„dƒZ d dd„Z ddd„Z ed kr¶d Z ye ƒdZ Wn4e k rªZzed eejd �WYddZ[XnXeje ƒdS)éNc@s‚eZdZddd„Zdd„Zdd„Zd d „Zd d „Zej d krDdd„Z ddd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„ZdS) Ú EnvBuilderFNcCs(||_||_||_||_||_||_dS)N)Úsystem_site_packagesÚclearÚsymlinksÚupgradeÚwith_pipÚprompt)Úselfrrrrrr©r ú-/opt/alt/python36/lib64/python3.6/__init__.pyÚ__init__*s zEnvBuilder.__init__cCsxtjj|ƒ}|j|ƒ}|j}d|_|j|ƒ|j|ƒ|jrF|j|ƒ|j s`|j |ƒ|j |ƒ|rtd|_|j|ƒ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 Úcreate3s       zEnvBuilder.createcCs`xZtj|ƒD]L}tjj||ƒ}tjj|ƒs6tjj|ƒrBtj|ƒq tjj|ƒr tj |ƒq WdS)N) r ÚlistdirrÚjoinÚislinkÚisfileÚremoveÚisdirÚshutilZrmtree)r rÚfnr r r Úclear_directoryMs   zEnvBuilder.clear_directorycCs²dd„}tjj|ƒr$|jr$|j|ƒtjƒ}||_tjj|ƒd|_ |j dk rT|j n|j }d||_ ||ƒtj }t j dkr�d|kr�tj d}nt j}tjjtjj|ƒƒ\}}||_||_||_t j dkräd} d } tjj|d d ƒ} n(d } d } tjj|ddt jdd…d ƒ} tjj|| ƒ|_} || ƒ|| ƒt jdk�r|tjdk�r|t j dk�r|tjj|dƒ} tjj| ƒ�s|tjd| ƒtjj|| ƒ|_}| |_tjj||ƒ|_||ƒ|S)NcSs@tjj|ƒstj|ƒn$tjj|ƒs0tjj|ƒr.create_if_neededéz(%s) ÚdarwinÚ__PYVENV_LAUNCHER__Úwin32ZScriptsZIncludeÚLibz site-packagesÚbinÚincludeÚlibz python%d.%déé ÚposixÚlib64l)r rr"rr!ÚtypesÚSimpleNamespacerÚsplitÚenv_namerÚenvironÚsysÚplatformÚ executablerÚ python_dirZ python_exerÚ version_infoZinc_pathÚmaxsizeÚnameÚsymlinkÚbin_pathÚbin_nameÚenv_exe)r rr&rrÚenvr:ÚdirnameZexenameZbinnameZincpathZlibpathrZ link_pathÚbinpathr r r rUsN       zEnvBuilder.ensure_directoriesc Csztjj|jdƒ|_}t|ddd��L}|jd|jƒ|jrBd}nd}|jd|ƒ|jd 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Úwriter;rr8r<)r rrÚfZinclr r r r�s zEnvBuilder.create_configurationÚntcCs(|jdƒrd}n|jdƒo"|jdƒ}|S)Nú.pydú.dllTÚpythonz.exe)rNrO)ÚendswithÚ startswith)r rLÚresultr r r Úinclude_binary¡s zEnvBuilder.include_binaryc Cs~|j }|sjy6tjj|ƒs@|r4tjtjj|ƒ|ƒn tj||ƒWn&tk rhtjd||ƒd}YnX|rzt j ||ƒ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_copycsð|j}|j}|j}||j|ƒ|j}tjdkrštjj|ƒsFtj |dƒxNd D]F}tjj ||ƒ}tjj |ƒsL||j|dd�tjj|ƒsLtj |dƒqLW�nRd}|j ‰‡fdd „tj |ƒDƒ}x<|D]4} tjj || ƒ} tjj || ƒ} | |jkrÂ|| | ƒqÂWtjj ||ƒ}tjj|ƒ�rd‡fd d „tj |ƒDƒ}x4|D],} tjj || ƒ} tjj || ƒ} || | ƒ�q4Wx†tj|jƒD]v\} } }d |k�rrtjj| ƒ}tjj |jd |ƒ}tjj |ƒ�s¼tj|ƒtjj | d ƒ} tjj |d ƒ} tj| | ƒP�qrWdS)NrMiírPÚpython3T)r\ZDLLscsg|]}ˆ|ƒr|‘qSr r )Ú.0rL)r-r r ú Õsz+EnvBuilder.setup_python..csg|]}ˆ|ƒr|‘qSr r )r_rL)r-r r r`Ýszinit.tclr+)rPr^)r@rBr]r:r;r r>rrÚchmodrr"rTrrÚwalkrUrr#rrY)r rrErÚcopierrDÚsuffixZsubdirÚfilesrLrZr[ÚrootÚdirsZtcldirr )r-r r»sN              zEnvBuilder.setup_pythoncCs$|jddddg}tj|tjd�dS)Nz-ImZ ensurepipz --upgradez --default-pip)Ústderr)rBÚ subprocessZ check_outputZSTDOUT)r rÚcmdr r r rîs zEnvBuilder._setup_pipcCs2tjjtjjtƒƒ}tjj|dƒ}|j||ƒdS)NÚscripts)r rrrDÚ__file__rÚinstall_scripts)r rrr r r r÷s zEnvBuilder.setup_scriptscCsdS)Nr )r rr r r rszEnvBuilder.post_setupcCsJ|jd|jƒ}|jd|jƒ}|jd|jƒ}|jd|jƒ}|jd|jƒ}|S)NZ __VENV_DIR__Z __VENV_NAME__Z__VENV_PROMPT__Z__VENV_BIN_NAME__Z__VENV_PYTHON__)Úreplacerr6rrArB)r Útextrr r r Úreplace_variabless zEnvBuilder.replace_variablesc!Csž|j}t|ƒ}�xˆtj|ƒD�]x\}}}||kr`x,|dd…D]}|dtjfkr>|j|ƒq>Wq�x2|D�](} tjj|| ƒ} ||d…jtj ƒdd…} | s¢|} ntjj|f| žŽ} tjj | ƒsÊtj | ƒtjj| | ƒ} t | dƒ�} | j ƒ}WdQRX| jdƒ�s^y$|jdƒ}|j||ƒ}|jdƒ}Wn6tk �r\}zd}tjd| |ƒWYdd}~XnX|dk rht | dƒ�} | j|ƒWdQRXtj| | ƒqhWqWdS)NÚcommonr/Úrbz.exezutf-8z+unable to copy script %r, may be binary: %sÚwb)r@Úlenr rbr>rrrr5Úsepr"r#rJÚreadrQÚdecoderpÚencodeÚ UnicodeErrorrWrXrKrZcopymode)r rrrEZplenrfrgrer%rLZsrcfilerdZdstdirZdstfileÚdataÚer r r rm"s@        zEnvBuilder.install_scripts)FFFFFN)F)Ú__name__Ú __module__Ú __qualname__r rr!rrr r>rTr]rrrrrprmr r r r rs 8  3  rFcCs t|||||d�}|j|ƒdS)N)rrrrr)rr)rrrrrrÚbuilderr r r rRsrc Csbd}tjd*krd}nttdƒs"d}|s2tdƒ‚�n,ddl}|jtddd �}|jd d d d d�|jdddddd�tj dkr€d}nd}|j ƒ}|jd|dddd�|jd| dddd�|jdddddd�|jddddd d�|jd!d"ddd#d$�|jd%d&d'�|j |ƒ}|j �r"|j �r"td(ƒ‚t|j|j |j|j |j|jd)�}x|jD]}|j|ƒ�qJWdS)+NTrIFÚ 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‡rMz --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)rIrI)r8r<Úhasattrr$ÚargparseÚArgumentParserr|Ú add_argumentr r>Úadd_mutually_exclusive_groupÚ parse_argsrrrr‰rrrrgr) ÚargsZ compatibler�ÚparserZ use_symlinksÚgroupÚoptionsrr%r r r ÚmainZs\             r˜Ú__main__r'z Error: %s)Úfile)FFFFN)N)Zloggingr rrir8r3Z getLoggerr|rWrrr˜ZrcrVr{ÚprintrhÚexitr r r r Ús( C  H$