o
    JAfì[  ã                
   @   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Ze  e	¡Z
G dd„ dƒZ		ddd„Zddd	„Ze	d
krgdZzeƒ  d ZW n ey_ Z zede ejd W Y dZ[ndZ[ww e e¡ dS 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r(d 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rt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   ú$/usr/lib/python3.10/venv/__init__.pyÚ__init__.   s   
zEnvBuilder.__init__c                 C   sŽ   	 t j |¡}|  |¡}| j}d| _|  |¡ |  |¡ | jr$|  |¡ | j	s1|  
|¡ |  |¡ |r;d| _|  |¡ | jrE|  |¡ d S 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 ]&}t j ||¡}t j |¡st 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_directoryW   s   
€ûzEnvBuilder.clear_directoryc                 C   sä  	 dd„ }t j |¡r| jr|  |¡ t ¡ }||_t j |¡d |_	| j
d ur+| j
n|j	}d| |_
||ƒ tj}|s@tdƒ‚t j t j |¡¡\}}||_||_||_tjdkrgd}d}	t j |d	d
¡}
nd}d}	t j |ddtjd d…  d
¡}
t j ||	¡ |_}||ƒ ||
ƒ tjdkr¯t jdkr¯tjdkr¯t j |d¡}t j |¡s¯t  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   sB   t j | ¡st  | ¡ d S t j | ¡st j | ¡rtd|  ƒ‚d S )NzUnable to create directory %r)r
   r   ÚexistsÚmakedirsr"   r#   Ú
ValueError)Údr   r   r   Úcreate_if_neededg   s
   ÿz7EnvBuilder.ensure_directories.<locals>.create_if_neededé   z(%s) z“Unable to determine path to the running Python interpreter. Provide an explicit path or check that your PATH environment variable is correctly set.Ú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,   r   Ú
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C}| d|j ¡ | jr"d}nd}| d| ¡ | d	t	j
d d
…  ¡ | jd urN| d| j›d¡ W d   ƒ d S W d   ƒ d S 1 sYw   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  }|s5ztj |¡s!|rt tj |¡|¡ nt ||¡ W n ty4   t d||¡ d}Y nw |r?t	 
||¡ d S 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   sX  	 t j |¡ot j |¡ }| jrB|sBt j |¡sBz|r)t  t j |¡|¡ W d S t  ||¡ W d S  tyA   t	 
d||¡ Y nw t j t j |¡¡\}}t j t j t¡dd|| ¡}t d¡sht j |¡s’| d¡rwd| }|d d… }|dkr~d}n|d	kr„d
}t j t j |¡|| ¡}n|}t j |¡s¤|s¢t	 
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^   Ï   sB   ÿÿý
c                 C   sÊ  	 |j }|j}| j}|j}tjdkrU||j|ƒ tj |¡s$t 	|d¡ dddt
jd › fD ]#}tj ||¡}tj |¡sR||j|dd tj |¡sRt 	|d¡ q/d S | jrod	d
„ t |¡D ƒ}t d¡rndd
„ |D ƒ}nh d£}tj |j¡}| |¡ |D ]}tj ||¡}	tj |	¡rš||	tj ||¡ƒ qt d¡rát |j¡D ]<\}
}}d|v ràtj |
¡}tj |jd|¡}tj |¡sÉt |¡ tj |
d¡}	tj |d¡}t |	|¡  d S q¦d S d 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python_d.exezpythonw_d.exezpythonw.exez
python.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   ú   s`   
€ù	ÿ
ÿ€
€

øý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   7  s
   
ÿzEnvBuilder._setup_pipc                 C   s4   	 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   O  s   zEnvBuilder.post_setupc                 C   sL   	 |  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__)Úreplacer   r:   r   rE   rF   )r   Útextr   r   r   r   Úreplace_variablesY  s   
zEnvBuilder.replace_variablesc                 C   sÔ  	 |j }t|ƒ}t |¡D ]Ú\}}}||kr,|d d … D ]}|dtjfvr*| |¡ qq|D ]¸}	tjdkr@|	 d¡r@|	 d¡r@q.tj 	||	¡}
||d …  
tj¡dd … }|sZ|}n
tjj	|g|¢R Ž }tj |¡sot |¡ tj 	||	¡}t|
dƒ}	|	 ¡ }W d   ƒ n1 sŠw   Y  |
 d¡sÂz| d¡}|  ||¡}| d¡}W n tyÁ } zd }t d|
|¡ W Y d }~nd }~ww |d uræt|d	ƒ}	|	 |¡ W d   ƒ n1 sÛw   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   ÚreadÚ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}   k  s\   
€ÿ

ÿ

ÿ€þÿ€åú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)Ú__name__Ú
__module__Ú__qualname__r   r   r)   r   r   r
   rB   r^   r   r   r   r   r€   r}   r   r   r   r   r   r      s(    
þG

+=	
2r   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   sx  d}t jdk r
d}ntt dƒsd}|stdƒ‚d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r|jrtd,ƒ‚t|j|j|j|j|j|j|jd-}|jD ]}| |¡ q²d 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)FFFFNFr   )Úloggingr
   r&   rx   r;   re   r7   r   Ú	getLoggerr’   rJ   r   r   r°   ÚrcrY   rŒ   Úprintrw   Úexitr   r   r   r   Ú<module>   s:    
   
ÿ
N€ÿù