a DOgC_ @sddlZddlZddlZddlZddlZddlZddlZddlZdZe e Z GdddZ dddZ ddd Ze d krd ZzedZWn6eyZzed eejd WYdZ[n dZ[00eedS)N)pipZ setuptoolsc@seZdZdddZddZddZd d Zd d Zej d krHd ddZ n d!ddZ ddZ ddZ ddZ ddZddZddZddZdS)" EnvBuilderFNcCsF||_||_||_||_||_|dkr6tjt}||_ ||_ dS)N.) system_site_packagesclearsymlinksupgradewith_pipospathbasenamegetcwdprompt upgrade_deps)selfrrrrr rrr%/usr/lib64/python3.9/venv/__init__.py__init__/szEnvBuilder.__init__cCstj|}||}|j}d|_|||||jrF|||j s`| || ||rtd|_|||j r| |dS)NFT)r r abspathensure_directoriesrcreate_configuration setup_pythonr _setup_pipr setup_scripts post_setuprupgrade_dependencies)renv_dircontextZtrue_system_site_packagesrrrcreate<s         zEnvBuilder.createcCs\t|D]L}tj||}tj|s4tj|r@t|q tj|r t |q dSN) r listdirr joinislinkisfileremoveisdirshutilrmtree)rr fnrrrclear_directoryXs   zEnvBuilder.clear_directorycCsdd}tj|r$|jr$||t}||_tj|d|_ |j durT|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| ||_|| |j|_t jdkrtj|j}tj|tj|jkrtd|j|||_|S)NcSs@tj|st|n$tj|s0tj|r.create_if_neededz(%s) win32ZScriptsZIncludeLibz site-packagesbinZincludelibz python%d.%dlposixdarwinZlib64zActual environment location may have moved due to redirects, links or junctions. Requested location: "%s" Actual location: "%s") r r r*rr)typesSimpleNamespacersplitenv_namersys_base_executabler executable python_dirZ python_exeplatformr! version_infoZinc_pathmaxsizenamesymlinkbin_pathbin_nameenv_exe env_exec_cmdrealpathnormcaseloggerwarning)rrr.rrr=dirnameZexenameZbinnameZincpathZlibpathr Z link_pathbinpathZ real_env_exerrrr`s\      zEnvBuilder.ensure_directoriescCstj|jd|_}t|dddt}|d|j|jrBd}nd}|d||d t j dd |j dur|d |j d Wdn1s0YdS) Nz pyvenv.cfgwutf-8)encodingz home = %s trueZfalsez"include-system-site-packages = %s zversion = %d.%d.%d z prompt =  ) r r r!rZcfg_pathopenwriter>rr;r@r)rrr fZinclrrrrs  zEnvBuilder.create_configurationntcCs||j }|shz6tj|s@|r4ttj||n t||Wn$tyftd||d}Yn0|rxt ||dS)NUnable to symlink %r to %rT) rr r r"rCr ExceptionrJrKr&copyfile)rsrcdstrelative_symlinks_okZ force_copyrrrsymlink_or_copys   zEnvBuilder.symlink_or_copycCsZtj|otj| }|jr~|s~tj|s~z,|rLttj||n t||WdSty|t d||Yn0tj tj|\}}tj tj tdd||}tdstj|s"|drd|}|dd}|dkrd}n|d krd }tj tj |||}n|}tj|sJ|sFt d |dSt||dS) NrXscriptsrWTZ_dpythonZ venvlauncherZpythonwZ venvwlauncherzUnable to copy %r)r r lexistsr*rr"rCr rYrJrKsplitextr!rL__file__ sysconfigis_python_buildr#endswithr&rZ)rr[r\r]Zbad_srcr extZsrcfnrrrr^s<      cCs|j}|j}|j}|j}tjdkr||j|tj|sFt |ddddt j dfD]F}tj ||}tj |s\||j|ddtj|s\t |dq\n$|jrd d t|D}tdrd d |D}n hd }tj|j}|||D]6}tj ||} tj| r|| tj ||qtdrt|jD]z\} } } d | vrPtj| } tj |jd| } tj | st| tj | d } tj | d }t| |q̐qPdS)NrWiraZpython3zpython3.r/T)r]cSs,g|]$}tjtj|ddvr|qS)r/).exez.dll)r r rIrc.0rVrrr sz+EnvBuilder.setup_python..cSs"g|]}tj|dr|qS))raZ vcruntime)r r rI startswithrjrrrrls>z pythonw_d.exez pythonw.exez python_d.exez python.exezinit.tclr1)rDrFr^r>r rBr=r r"chmodr;r@r!r*rr rerfr addrbwalkrr+r&rZ)rrrMr ZcopierrLsuffixsuffixesZbase_exer[rootdirsfilesZtcldirr\rrrrsP             zEnvBuilder.setup_pythoncCs$|jddddg}tj|tjddS)Nz-ImZ ensurepip --upgradez --default-pip)stderr)rG subprocess check_outputSTDOUTrrcmdrrrr3s zEnvBuilder._setup_pipcCs2tjtjt}tj|d}|||dS)Nr_)r r rrLrdr!install_scripts)rrr rrrr<s zEnvBuilder.setup_scriptscCsdSrr)rrrrrrKszEnvBuilder.post_setupc s|j|j|j|j|jd}dd}dd}tj|j}|drF|n|drV|ntjfdd | D}| D]\}}| ||}qz|S) N)Z __VENV_DIR__Z __VENV_NAME__Z__VENV_PROMPT__Z__VENV_BIN_NAME__Z__VENV_PYTHON__cSs|dd}d|dS)N'z'')replacesrrr quote_ps1hs z/EnvBuilder.replace_variables..quote_ps1cSs|Srrrrrr quote_batrsz/EnvBuilder.replace_variables..quote_batz.ps1z.batcsi|]\}}||qSrr)rkkeyrquoterr z0EnvBuilder.replace_variables..) rr:rrErFshlexr script_pathrgitemsr) rtextrZ replacementsrrrrZquotedrrrreplace_variablesUs&    zEnvBuilder.replace_variablesc Cs|j}t|}t|D]\}}}||krX|ddD]}|dtjfvr8||q8q|D]~} tjdkr| dr| drq\tj || } ||d tj dd} | s|} ntjj |g| R} tj | st | tj | | } t| d} | }Wdn1s0Y| ds| |_z$|d}|||}|d}Wn8ty}zd}td| |WYd}~n d}~00|dur\t| d } | |Wdn1s0Yt| | q\qdS) NcommonrWra)riz.pdbr4rbrOz+unable to copy script %r, may be binary: %swb)rDlenr rprBr$rmrgr r!r9sepr*r+rTreadrdecoderencode UnicodeErrorrJrKrUr&copymode)rrr rMplenrsrtrur-rVZsrcfilerqZdstdirZdstfiledataerrrr}sL      (    *zEnvBuilder.install_scriptscCs@tdtd|j|jddddg}|tt|dS)Nz Upgrading z packages in z-mrinstallrv)rJdebugCORE_VENV_DEPSrDrGextendrx check_callr{rrrrs  zEnvBuilder.upgrade_dependencies)FFFFFNF)F)F)__name__ __module__ __qualname__rrr)rrr rBr^rrrrrr}rrrrrrs$ B   +=  03rFcCs"t||||||d}||dS)N)rrrr rr)rr)rrrrr rrbuilderrrrrs rc Csd}tjdkrd}nttds"d}|s2tdnLddl}|jtddd }|jd d d d d|jddddddtj dkrd}nd}| }|jd|dddd|jd| dddd|jdddddd|jddddd d|jd!d"ddd#d$|jd%d&d'|jd(ddd)d* d+ t d||}|jrB|jrBtd,t|j|j|j|j|j|j|jd-}|jD]}||qldS).NT)rRrRF 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 descriptionepilogrtZENV_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.)defaultactiondestrrWz --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.rvrzlUpgrade 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.)rz--upgrade-depsrz;Upgrade core dependencies: {} to the latest version in PyPI z1you cannot supply --upgrade and --clear together.)rrrrr rr)r;r@hasattrr,argparseArgumentParserr add_argumentr rBadd_mutually_exclusive_groupformatr!r parse_argsrrrrrr rrrtr) argsZ compatiblerparserZ use_symlinksgroupoptionsrr-rrrmains~           r__main__r/z Error: %s)file)FFFFNF)N)loggingr r&rxr;rer7rr getLoggerrrJrrrrcrYrprintrwexitrrrrs2 /  N(