a
    &RîhC_  ã                
   @   sÐ   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZdZe  	e
¡ZG dd„ dƒZddd„Zddd	„Ze
d
krÌdZzeƒ  d ZW n6 eyÀ Z zede ejd W Y dZ[n
dZ[0 0 e e¡ dS )é    N)ÚpipZ
setuptoolsc                   @   sŽ   e Zd Zddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zej	dkrHd dd„Z
n
d!dd„Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )"Ú
EnvBuilderFNc                 C   sF   || _ || _|| _|| _|| _|dkr6tj t ¡ ¡}|| _	|| _
d S )NÚ.)Úsystem_site_packagesÚclearÚsymlinksÚupgradeÚwith_pipÚosÚpathÚbasenameÚgetcwdÚpromptÚupgrade_deps)Úselfr   r   r   r   r	   r   r   © r   ú5/opt/python-3.9.24/usr/lib/python3.9/venv/__init__.pyÚ__init__/   s    zEnvBuilder.__init__c                 C   sˆ   t j |¡}|  |¡}| j}d| _|  |¡ |  |¡ | jrF|  |¡ | j	s`|  
|¡ |  |¡ |rtd| _|  |¡ | jr„|  |¡ d S )NFT)r
   r   ÚabspathÚensure_directoriesr   Úcreate_configurationÚsetup_pythonr	   Ú
_setup_pipr   Úsetup_scriptsÚ
post_setupr   Úupgrade_dependencies)r   Úenv_dirÚcontextZtrue_system_site_packagesr   r   r   Úcreate<   s     






zEnvBuilder.createc                 C   s\   t  |¡D ]L}t j ||¡}t j |¡s4t j |¡r@t  |¡ q
t j |¡r
t 	|¡ q
d S ©N)
r
   Úlistdirr   ÚjoinÚislinkÚisfileÚremoveÚisdirÚshutilÚrmtree)r   r   Úfnr   r   r   Úclear_directoryX   s    zEnvBuilder.clear_directoryc                 C   sâ  dd„ }t j |¡r$| jr$|  |¡ t ¡ }||_t j |¡d |_	| j
d urT| j
n|j	}d| |_
||ƒ tj}t j t j |¡¡\}}||_||_||_tjdkrÀd}d}	t j |dd	¡}
n(d
}d}	t j |ddtjd d…  d	¡}
t j ||	¡ |_}||ƒ ||
ƒ tjdkrXt jdkrXtjdkrXt j |d¡}t j |¡sXt  d|¡ t j ||¡ |_}||_t j ||¡|_||ƒ |j|_tjdkrÞt j |j¡}t j |¡t j |j¡krÞt d|j|¡ ||_|S )Nc                 S   s@   t j | ¡st  | ¡ n$t j | ¡s0t j | ¡r<td|  ƒ‚d S )NzUnable to create directory %r)r
   r   ÚexistsÚmakedirsr"   r#   Ú
ValueError)Údr   r   r   Úcreate_if_neededh   s    z7EnvBuilder.ensure_directories.<locals>.create_if_neededé   z(%s) Úwin32ZScriptsZIncludeÚLibzsite-packagesÚbinZincludeÚlibzpython%d.%dé   l        ÚposixÚdarwinZlib64z†Actual environment location may have moved due to redirects, links or junctions.
  Requested location: "%s"
  Actual location:    "%s") r
   r   r*   r   r)   ÚtypesÚSimpleNamespacer   ÚsplitÚenv_namer   ÚsysÚ_base_executabler   Ú
executableÚ
python_dirZ
python_exeÚplatformr!   Úversion_infoZinc_pathÚmaxsizeÚnameÚsymlinkÚbin_pathÚbin_nameÚenv_exeÚenv_exec_cmdÚrealpathÚnormcaseÚloggerÚwarning)r   r   r.   r   r   r=   ÚdirnameZexenameZbinnameZincpathZlibpathr   Z	link_pathÚbinpathZreal_env_exer   r   r   r   `   s\    



þÿüzEnvBuilder.ensure_directoriesc                 C   s¬   t j |jd¡ |_}t|dddt}| d|j ¡ | jrBd}nd}| d| ¡ | d	t	j
d d
…  ¡ | jd urŠ| d| j›d¡ W d   ƒ n1 sž0    Y  d S )Nz
pyvenv.cfgÚwúutf-8)Úencodingz
home = %s
ÚtrueZfalsez"include-system-site-packages = %s
zversion = %d.%d.%d
é   z	prompt = Ú
)r
   r   r!   r   Zcfg_pathÚopenÚwriter>   r   r;   r@   r   )r   r   r   ÚfZinclr   r   r   r   ¢   s    	
zEnvBuilder.create_configurationÚntc                 C   s|   | j  }|shz6tj |¡s@|r4t tj |¡|¡ nt ||¡ W n$ tyf   t d||¡ d}Y n0 |rxt	 
||¡ d S )NúUnable to symlink %r to %rT)r   r
   r   r"   rC   r   Ú	ExceptionrJ   rK   r&   Úcopyfile)r   ÚsrcÚdstÚrelative_symlinks_okZ
force_copyr   r   r   Úsymlink_or_copy¸   s    
zEnvBuilder.symlink_or_copyc                 C   sZ  t j |¡ot j |¡ }| jr~|s~t j |¡s~z,|rLt  t j |¡|¡ nt  ||¡ W d S  ty|   t	 
d||¡ Y n0 t j t j |¡¡\}}t j t j t¡dd|| ¡}t d¡sÌt j |¡s"| d¡rêd| }|d d… }|dkrød}n|d	krd
}t j t j |¡|| ¡}n|}t j |¡sJ|sFt	 
d|¡ d S t ||¡ d S )NrX   ÚscriptsrW   TZ_déþÿÿÿÚpythonZvenvlauncherZpythonwZvenvwlauncherzUnable to copy %r)r
   r   Úlexistsr*   r   r"   rC   r   rY   rJ   rK   Úsplitextr!   rL   Ú__file__Ú	sysconfigÚis_python_buildr#   Úendswithr&   rZ   )r   r[   r\   r]   Zbad_srcr   ÚextZsrcfnr   r   r   r^   Ë   s<    ý

c                 C   sÐ  |j }|j}| j}|j}tjdkr¨||j|ƒ tj |¡sFt 	|d¡ dddt
jd › fD ]F}tj ||¡}tj |¡s\||j|dd tj |¡s\t 	|d¡ q\n$| jrÜd	d
„ t |¡D ƒ}t d¡rüdd
„ |D ƒ}n h d£}tj |j¡}| |¡ |D ]6}tj ||¡}	tj |	¡r ||	tj ||¡ƒ q t d¡rÌt |j¡D ]z\}
}}d|v rPtj |
¡}tj |jd|¡}tj |¡sšt |¡ tj |
d¡}	tj |d¡}t |	|¡  qÌqPd S )NrW   ií  ra   Zpython3zpython3.r/   T)r]   c                 S   s,   g | ]$}t j t j |¡d  ¡dv r|‘qS )r/   )ú.exez.dll)r
   r   rI   rc   ©Ú.0rV   r   r   r   Ú
<listcomp>  s   ÿz+EnvBuilder.setup_python.<locals>.<listcomp>c                 S   s"   g | ]}t j |¡ d ¡r|‘qS ))ra   Z	vcruntime)r
   r   rI   Ú
startswithrj   r   r   r   rl     s   ÿ>   zpythonw.exezpythonw_d.exez
python.exezpython_d.exezinit.tclr1   )rD   rF   r^   r>   r
   rB   r=   r   r"   Úchmodr;   r@   r!   r*   r   r    re   rf   r   Úaddrb   Úwalkr   r+   r&   rZ   )r   r   rM   r   ZcopierrL   ÚsuffixÚsuffixesZbase_exer[   ÚrootÚdirsÚfilesZtcldirr\   r   r   r   r   ö   sP    
ÿ
ÿ


zEnvBuilder.setup_pythonc                 C   s$   |j ddddg}tj|tjd d S )Nz-ImZ	ensurepipú	--upgradez--default-pip)Ústderr)rG   Ú
subprocessÚcheck_outputÚSTDOUT©r   r   Úcmdr   r   r   r   3  s    
ÿzEnvBuilder._setup_pipc                 C   s2   t j t j t¡¡}t j |d¡}|  ||¡ d S )Nr_   )r
   r   r   rL   rd   r!   Úinstall_scripts)r   r   r   r   r   r   r   <  s    zEnvBuilder.setup_scriptsc                 C   s   d S r   r   )r   r   r   r   r   r   K  s    zEnvBuilder.post_setupc           	         s”   |j |j|j|j|jdœ}dd„ }dd„ }tj‰ |j}| d¡rF|‰ n| d¡rV|‰ ntj‰ ‡ fdd	„| 	¡ D ƒ}| 	¡ D ]\}}| 
||¡}qz|S )
N)Z__VENV_DIR__Z__VENV_NAME__Z__VENV_PROMPT__Z__VENV_BIN_NAME__Z__VENV_PYTHON__c                 S   s   |   dd¡} d| › dS )Nú'z'')Úreplace©Úsr   r   r   Ú	quote_ps1h  s    z/EnvBuilder.replace_variables.<locals>.quote_ps1c                 S   s   | S r   r   r€   r   r   r   Ú	quote_batr  s    z/EnvBuilder.replace_variables.<locals>.quote_batz.ps1z.batc                    s   i | ]\}}|ˆ |ƒ“qS r   r   )rk   Úkeyr   ©Úquoter   r   Ú
<dictcomp>€  ó    z0EnvBuilder.replace_variables.<locals>.<dictcomp>)r   r:   r   rE   rF   Úshlexr†   Úscript_pathrg   Úitemsr   )	r   Útextr   Zreplacementsr‚   rƒ   rŠ   r„   Zquotedr   r…   r   Úreplace_variablesU  s&    û


zEnvBuilder.replace_variablesc                 C   sä  |j }t|ƒ}t |¡D ]Ä\}}}||krX|d d … D ]}|dtjfvr8| |¡ q8q|D ]~}	tjdkr‚|	 d¡r‚|	 d¡r‚q\tj 	||	¡}
||d …  
tj¡dd … }|s¶|}ntjj	|g|¢R Ž }tj |¡sàt |¡ tj 	||	¡}t|
dƒ}	|	 ¡ }W d   ƒ n1 s0    Y  |
 d¡s’|
|_z$| d¡}|  ||¡}| d¡}W n8 ty } zd }t d|
|¡ W Y d }~n
d }~0 0 |d ur\t|d	ƒ}	|	 |¡ W d   ƒ n1 sÆ0    Y  t |
|¡ q\qd S )
NÚcommonrW   ra   )ri   z.pdbr4   ÚrbrO   z+unable to copy script %r, may be binary: %sÚwb)rD   Úlenr
   rp   rB   r$   rm   rg   r   r!   r9   Úsepr*   r+   rT   ÚreadrŠ   Údecoder   ÚencodeÚUnicodeErrorrJ   rK   rU   r&   Úcopymode)r   r   r   rM   Zplenrs   rt   ru   r-   rV   Zsrcfilerq   ZdstdirZdstfileÚdataÚer   r   r   r}   …  sL    
ÿ
(
ÿ*zEnvBuilder.install_scriptsc                 C   s@   t  dt› d|j› ¡ |jddddg}| t¡ t |¡ d S )Nz
Upgrading z packages in z-mr   Úinstallrv   )rJ   ÚdebugÚCORE_VENV_DEPSrD   rG   Úextendrx   Ú
check_callr{   r   r   r   r   ¸  s    ÿ
zEnvBuilder.upgrade_dependencies)FFFFFNF)F)F)Ú__name__Ú
__module__Ú__qualname__r   r   r)   r   r   r
   rB   r^   r   r   r   r   r   r}   r   r   r   r   r   r      s$      þ
B

+=	
03r   Fc                 C   s"   t ||||||d}| | ¡ d S )N)r   r   r   r	   r   r   )r   r   )r   r   r   r   r	   r   r   Úbuilderr   r   r   r   Á  s
    þr   c           	   
   C   s‚  d}t jdk rd}ntt dƒs"d}|s2tdƒ‚nLdd l}|jtddd	}|jd
dddd |jdddddd tj	dkr€d}nd}| 
¡ }|jd|dddd |jd| dddd |jdddddd |jddddd d |jd!d"ddd#d$ |jd%d&d' |jd(ddd)d* d+ t¡¡d | | ¡}|jrB|jrBtd,ƒ‚t|j|j|j|j|j|j|jd-}|jD ]}| |¡ qld S ).NT)rR   rR   FÚbase_prefixz.This script is only for use with Python >= 3.3r   zFCreates 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Úepilogrt   ZENV_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ª   rW   z
--symlinksr   z[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--clearr   zcDelete the contents of the environment directory if it already exists, before environment creation.rv   r   zlUpgrade 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))r¯   r­   r®   rª   z--promptz;Provides an alternative prompt prefix for this environment.)rª   z--upgrade-depsr   z;Upgrade core dependencies: {} to the latest version in PyPIú z1you cannot supply --upgrade and --clear together.)r   r   r   r   r	   r   r   )r;   r@   Úhasattrr,   ÚargparseÚArgumentParserrŸ   Úadd_argumentr
   rB   Úadd_mutually_exclusive_groupÚformatr!   rœ   Ú
parse_argsr   r   r   r¬   r   r	   r   r   rt   r   )	ÚargsZ
compatibler³   ÚparserZuse_symlinksÚgroupÚoptionsr¢   r-   r   r   r   ÚmainÉ  s~    

û

ÿþ
þ
þ
ÿ
ÿþÿ
þþ
ú
r½   Ú__main__r/   z	Error: %s)Úfile)FFFFNF)N)Úloggingr
   r&   rx   r;   re   r7   r‰   rœ   Ú	getLoggerrŸ   rJ   r   r   r½   ÚrcrY   r™   Úprintrw   Úexitr   r   r   r   Ú<module>   s2   
   /  ÿ

N(