3 öLÖjqMã@sÂddlZddlZddlZddlZddlZddlZddlZejeƒZ Gdd„dƒZ d dd„Z ddd„Z ed kr¾d Z ye ƒdZ Wn4ek 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 ú%/usr/lib64/python3.6/venv/__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 Úcreate4s       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_directoryNs   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__Zwin32ZScriptsZIncludeÚ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Úenvr9ÚdirnameZexenameZbinnameZincpathZlibpathrZ link_pathÚbinpathr r r rVsN       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:rr7r;)r rrÚfZinclr r r rŽs zEnvBuilder.create_configurationÚntcCs(|jdƒrd}n|jdƒo"|jdƒ}|S)Nú.pydú.dllTÚpythonz.exe)rMrN)ÚendswithÚ startswith)r rKÚ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)NrLiírOÚpython3T)r[ZDLLscsg|]}ˆ|ƒr|‘qSr r )Ú.0rK)r,r r ú Ösz+EnvBuilder.setup_python..csg|]}ˆ|ƒr|‘qSr r )r^rK)r,r r r_Þszinit.tclr*)rOr])r?rAr\r9r:r r=rrÚchmodrr"rSrrÚwalkrTrr#rrX)r rrDrZcopierrCÚsuffixZsubdirÚfilesrKrYrZÚrootÚdirsZtcldirr )r,r r¼sN              zEnvBuilder.setup_pythoncCs$|jddddg}tj|tjd�dS)Nz-ImZ ensurepipz --upgradez --default-pip)Ústderr)rAÚ subprocessZ check_outputZSTDOUT)r rÚcmdr r r rïs zEnvBuilder._setup_pipcCs2tjjtjjtƒƒ}tjj|dƒ}|j||ƒdS)NÚscripts)r rrrCÚ__file__rÚinstall_scripts)r rrr r r røs zEnvBuilder.setup_scriptscCsdS)Nr )r rr r r rszEnvBuilder.post_setupc s˜|j|j|j|j|jdœ}dd„}dd„}tj‰|j}|jdƒrF|‰n|jdƒrV|‰ntj‰‡fdd „|j ƒDƒ}x |j ƒD]\}}|j ||ƒ}q|W|S) N)Z __VENV_DIR__Z __VENV_NAME__Z__VENV_PROMPT__Z__VENV_BIN_NAME__Z__VENV_PYTHON__cSs|jddƒ}d|›d�S)Nú'z'')Úreplace)Úsr r r Ú quote_ps1$s z/EnvBuilder.replace_variables..quote_ps1cSs|S)Nr )rnr r r Ú quote_bat.sz/EnvBuilder.replace_variables..quote_batz.ps1z.batcsi|]\}}ˆ|ƒ|“qSr r )r^Úkeyrn)Úquoter r ú <sz0EnvBuilder.replace_variables..) rr5rr@rAÚshlexrrÚ script_pathrPÚitemsrm) r ÚtextrZ replacementsrorprurqZquotedr )rrr Úreplace_variabless$     zEnvBuilder.replace_variablesc!Cs¤|j}t|ƒ}�xŽtj|ƒD�]~\}}}||kr`x,|dd…D]}|dtjfkr>|j|ƒq>Wq�x8|D�].} tjj|| ƒ} ||d…jtj ƒdd…} | s¢|} ntjj|f| žŽ} tjj | ƒsÊtj | ƒtjj| | ƒ} t | dƒ�} | j ƒ}WdQRX| jdƒ�sd| |_y$|jdƒ}|j||ƒ}|jdƒ}Wn6tk �rb}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 rar=rrrr4Úsepr"r#rIÚreadrPruÚdecoderxÚencodeÚ UnicodeErrorrVrWrJrZcopymode)r rrrDZplenrdrercr%rKZsrcfilerbZdstdirZdstfileÚdataÚer r r rkAsB        zEnvBuilder.install_scripts)FFFFFN)F)Ú__name__Ú __module__Ú __qualname__r rr!rrr r=rSr\rrrrrxrkr r r r rs 8  3  0rFcCs 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)+NTrHFÚ 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.)ÚprogZ descriptionZepilogreZENV_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�rLz --symlinksrz[Try to use symlinks rather than copies, when symlinks are not the default for the platform.z--copiesZ 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)rHrH)r7r;Úhasattrr$ÚargparseÚArgumentParserr„Ú add_argumentr r=Zadd_mutually_exclusive_groupÚ parse_argsrrrr�rrrrer) ÚargsZ compatibler”ÚparserZ use_symlinksÚgroupZoptionsr‡r%r r r Úmainzs\             r›Ú__main__r'z Error: %s)Úfile)FFFFN)N)Zloggingr rrgr7r2rtZ getLoggerr„rVrrr›ZrcrUrƒÚprintrfÚexitr r r r Ús* b  H$