U ,aFR @sddlZddlZddlZddlZddlZddlZddlZeeZ GdddZ d ddZ dddZ ed krd Z ze dZ Wn4ek rZzed eejd W5dZ[XYnXee dS)Nc@seZdZdddZddZddZd d Zd d Zej d krHdddZ n dddZ ddZ ddZ ddZ ddZddZddZdS) EnvBuilderFNcCs(||_||_||_||_||_||_dSNsystem_site_packagesclearsymlinksupgradewith_pipprompt)selfrrrrr r r 2/opt/alt/python38/lib64/python3.8/venv/__init__.py__init__+s zEnvBuilder.__init__cCsxtj|}||}|j}d|_|||||jrF|||j s`| || ||rtd|_||dS)NFT) ospathabspathensure_directoriesrcreate_configuration setup_pythonr _setup_pipr setup_scripts post_setup)r env_dircontextZtrue_system_site_packagesr r r create4s       zEnvBuilder.createcCs\t|D]L}tj||}tj|s4tj|r@t|q tj|r t |q dSr) rlistdirrjoinislinkisfileremoveisdirshutilZrmtree)r rfnr r r clear_directoryNs   zEnvBuilder.clear_directorycCsdd}tj|r$|jr$||t}||_tj|d|_ |j dk rT|j n|j }d||_ ||t j }tjtj |\}}||_||_||_t jdkrd}d} tj|dd } n(d }d } tj|d d t jddd } tj|| |_} || || t jdkrXtjdkrXt jdkrXtj|d} tj| sXtd | tj|||_} ||_tj| ||_|| |S)NcSs@tj|st|n$tj|s0tj|r.create_if_neededz(%s) Zwin32ZScriptsZIncludeLibz site-packagesbinZincludelibz python%d.%dlposixdarwinlib64)rrr$rr#typesSimpleNamespacersplitenv_namer sys_base_executabler executable python_dirZ python_exeplatformr version_infoZinc_pathmaxsizenamesymlinkbin_pathbin_nameenv_exe)r rr(rr r7dirnameZexenameZbinnameZincpathZlibpathrZ link_pathbinpathr r r rVsL     zEnvBuilder.ensure_directoriesc Cstj|jd|_}t|dddj}|d|j|jrBd}nd}|d||d t j dd |j dk r|d |j d W5QRXdS) Nz pyvenv.cfgwutf-8)encodingz home = %s trueZfalsez"include-system-site-packages = %s zversion = %d.%d.%d z prompt =  ) rrrrZcfg_pathopenwriter8rr5r:r )r rrfZinclr r r rs  zEnvBuilder.create_configurationntcCs~|j }|sjz6tj|s@|r4ttj||n t||Wn&tk rhtd||d}YnX|rzt ||dS)NUnable to symlink %r to %rT) rrrrr=basename Exceptionloggerwarningr!copyfile)r srcdstrelative_symlinks_okZ force_copyr r r symlink_or_copys  zEnvBuilder.symlink_or_copycCs\tj|otj| }|jr|stj|sz,|rLttj||n t||WdStk r~t d||YnXtj tj|\}}tj tj tdd||}tdstj|s$|drd|}|dd}|dkrd}n|d krd }tj tj |||}n|}tj|sL|sHt d |dSt||dS) NrMscriptsrLTZ_dpythonZ venvlauncherZpythonwZ venvwlauncherzUnable to copy %r)rrlexistsr$rrr=rNrOrPrQsplitextrrA__file__ sysconfigis_python_buildrendswithr!rR)r rSrTrUZbad_srcrNZextZsrcfnr r r rVs<     cCs|j}|j}|j}|j}tjdkr||j|tj|sFt |ddD]F}tj ||}tj |sJ||j|ddtj|sJt |dqJn |j rddt |D}tdrdd|D}n d d d d g}|D]2}tj ||}tj|r||tj ||qtdrt|jD]z\} } } d | kr&tj| } tj |jd| } tj | spt| tj | d }tj | d } t|| qq&dS)NrLi)rYZpython3T)rUcSs,g|]$}tjtj|ddkr|qS)r)).exez.dll)rrnormcaser[.0rKr r r sz+EnvBuilder.setup_python..cSs"g|]}tj|dr|qS))rYZ vcruntime)rrra startswithrbr r r rdsz python.exez python_d.exez pythonw.exez pythonw_d.exezinit.tclr*)r>r@rVr8rr<r7rrchmodrr$rrr]r^rZwalkrNrr%r!rR)r rrBrZcopierrAsuffixsuffixesrSrootdirsfilesZtcldirrTr r r rsP             zEnvBuilder.setup_pythoncCs$|jddddg}tj|tjddS)Nz-ImZ ensurepip --upgradez --default-pip)stderr)r@ subprocessZ check_outputZSTDOUT)r rcmdr r r rs zEnvBuilder._setup_pipcCs2tjtjt}tj|d}|||dS)NrW)rrrrAr\rinstall_scripts)r rrr r r r#s zEnvBuilder.setup_scriptscCsdSrr )r rr r r r2szEnvBuilder.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__)replacerr4r r?r@)r textrr r r replace_variables<s zEnvBuilder.replace_variablesc Cs|j}t|}t|D]\}}}||krX|ddD]}|dtjfkr8||q8q|D]H} tjdkr| dr| drq\tj || } ||d tj dd} | s|} ntjj |f| } tj | st | tj | | } t| d} | }W5QRX| dsrz$|d}|||}|d}Wn6tk rp}zd}td| |W5d}~XYnX|dk r\t| d } | |W5QRXt| | q\qdS) NcommonrLrY)r`z.pdbr-rbrDz+unable to copy script %r, may be binary: %swb)r>lenrrgr<rrer_rrr3sepr$r%rIreaddecodertencode UnicodeErrorrPrQrJr!Zcopymode)r rrrBZplenrjrkrlr'rKZsrcfilerhZdstdirZdstfiledataer r r rqNsL          zEnvBuilder.install_scripts)FFFFFN)F)F)__name__ __module__ __qualname__rrr#rrrr<rVrrrrrtrqr r r r rs& 4   +<  rFcCs t|||||d}||dS)N)rrrr r )rr)rrrrr r builderr r r rsrc Cs^d}tjdkrd}nttds"d}|s2tdn(ddl}|jtddd }|jd d d d d|jddddddtj dkrd}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)}|jD]}||qHdS)*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.)progZ descriptionZepilogrkZENV_DIR+z)A directory to create the environment in.)metavarnargshelpz--system-site-packages store_true system_sitezDGive the virtual environment access to the system site-packages dir.)defaultactiondestrrLz --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.rmrzlUpgrade the environment directory to use this version of Python, assuming Python has been upgraded in-place.z --without-pipr z]Skips installing or upgrading pip in the virtual environment (pip is bootstrapped by default))rrrrz--promptz;Provides an alternative prompt prefix for this environment.)rz1you cannot supply --upgrade and --clear together.r)r5r:hasattrr&argparseArgumentParserr add_argumentrr<Zadd_mutually_exclusive_group parse_argsrrrrrr r rkr) argsZ compatiblerparserZ use_symlinksgroupZoptionsrr'r r r mains|          r__main__r)z Error: %s)file)FFFFN)N)Zloggingrr!ror5r]r1Z getLoggerrrPrrrZrcrOrprintrnexitr r r r s0 q  H$