???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
iqM                 @   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e jeZ	G dd dZ
dddZdddZed	krd
Zye  d ZW n4 ek
r Z zede ejd W Y ddZ[X nX eje dS )    Nc               @   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rDdd Z
d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   s(   || _ || _|| _|| _|| _|| _d S )N)system_site_packagesclearsymlinksupgradewith_pipprompt)selfr   r   r   r   r   r    r
   %/usr/lib64/python3.6/venv/__init__.py__init__+   s    zEnvBuilder.__init__c             C   sx   t jj|}| j|}| j}d| _| j| | j| | jrF| j| | j	s`| j
| | j| |rtd| _| j| d S )NFT)ospathabspathensure_directoriesr   create_configurationsetup_pythonr   
_setup_pipr   setup_scripts
post_setup)r	   env_dircontextZtrue_system_site_packagesr
   r
   r   create4   s    





zEnvBuilder.createc             C   s`   xZt j|D ]L}t jj||}t jj|s6t jj|rBt j| qt jj|rtj	| qW d S )N)
r   listdirr   joinislinkisfileremoveisdirshutilZrmtree)r	   r   fnr
   r
   r   clear_directoryN   s    zEnvBuilder.clear_directoryc             C   s  dd }t jj|r$| jr$| j| tj }||_t jj|d |_	| j
d k	rT| j
n|j	}d| |_
|| t j}tjdkrd|krt jd }ntj}t jjt jj|\}}||_||_||_tjdkrd}	d	}
t jj|d
d}n(d}	d}
t jj|ddtjd d  d}t jj||
 |_}|| || tjdkr|t jdkr|tjdkr|t jj|d}t jj|s|t jd| t jj||	 |_}|	|_t jj|||_|| |S )Nc             S   s@   t jj| st j|  n$t jj| s0t jj| r<td|  d S )NzUnable to create directory %r)r   r   existsmakedirsr   r   
ValueError)dr
   r
   r   create_if_needed^   s    z7EnvBuilder.ensure_directories.<locals>.create_if_needed   z(%s) darwin__PYVENV_LAUNCHER__Zwin32ZScriptsZIncludeLibzsite-packagesbinincludelibzpython%d.%d       posixlib64l        )r   r   r"   r   r!   typesSimpleNamespacer   splitenv_namer   environsysplatform
executabler   
python_dirZ
python_exer   version_infoZinc_pathmaxsizenamesymlinkbin_pathbin_nameenv_exe)r	   r   r&   r   r   envr9   dirnameZexenameZbinnameZincpathZlibpathr   Z	link_pathbinpathr
   r
   r   r   V   sN    



zEnvBuilder.ensure_directoriesc             C   sz   t jj|jd |_}t|dddL}|jd|j  | jrBd}nd}|jd|  |jd	t	j
d d
   W d Q R X d S )Nz
pyvenv.cfgwzutf-8)encodingz
home = %s
trueZfalsez"include-system-site-packages = %s
zversion = %d.%d.%d
   )r   r   r   r   Zcfg_pathopenwriter:   r   r7   r;   )r	   r   r   fZinclr
   r
   r   r      s    	zEnvBuilder.create_configurationntc             C   s(   |j drd}n|jdo"|j d}|S )N.pyd.dllTpythonz.exe)rM   rN   )endswith
startswith)r	   rK   resultr
   r
   r   include_binary   s    
zEnvBuilder.include_binaryc             C   s~   | j  }|sjy6tjj|s@|r4tjtjj|| ntj|| W n& tk
rh   tjd|| d}Y nX |rzt	j
|| d S )NzUnable to symlink %r to %rT)r   r   r   r   r>   basename	Exceptionloggerwarningr   copyfile)r	   srcdstrelative_symlinks_okZ
force_copyr
   r
   r   symlink_or_copy   s    
zEnvBuilder.symlink_or_copyc                s  |j }|j}| j}||j| |j}tjdkrtjj|sFtj	|d xNdD ]F}tjj
||}tjj|sL||j|dd tjj|sLtj	|d qLW nRd}| j  fdd	tj|D }x<|D ]4}	tjj
||	}
tjj
||	}||jkr||
| qW tjj
||}tjj|rd fd
d	tj|D }x4|D ],}	tjj
||	}
tjj
||	}||
| q4W xtj|jD ]v\}}}d|krrtjj|}tjj
|jd|}tjj|stj| tjj
|d}
tjj
|d}tj|
| P qrW d S )NrL   i  rO   python3T)r[   ZDLLsc                s   g | ]} |r|qS r
   r
   ).0rK   )r,   r
   r   
<listcomp>   s    z+EnvBuilder.setup_python.<locals>.<listcomp>c                s   g | ]} |r|qS r
   r
   )r^   rK   )r,   r
   r   r_      s    zinit.tclr*   )rO   r]   )r?   rA   r\   r9   r:   r   r=   r   r   chmodr   r"   rS   r   r   walkrT   r   r#   r   rX   )r	   r   rD   r   ZcopierrC   suffixZsubdirfilesrK   rY   rZ   rootdirsZtcldirr
   )r,   r   r      sN    






zEnvBuilder.setup_pythonc             C   s$   |j ddddg}tj|tjd d S )Nz-ImZ	ensurepipz	--upgradez--default-pip)stderr)rA   
subprocessZcheck_outputZSTDOUT)r	   r   cmdr
   r
   r   r      s    
zEnvBuilder._setup_pipc             C   s2   t jjt jjt}t jj|d}| j|| d S )Nscripts)r   r   r   rC   __file__r   install_scripts)r	   r   r   r
   r
   r   r      s    zEnvBuilder.setup_scriptsc             C   s   d S )Nr
   )r	   r   r
   r
   r   r     s    zEnvBuilder.post_setupc       	         s   |j |j|j|j|jd}dd }dd }tj |j}|jdrF| n|jdrV| ntj  fdd	|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__c             S   s   | j dd} d|  dS )N'z'')replace)sr
   r
   r   	quote_ps1$  s    z/EnvBuilder.replace_variables.<locals>.quote_ps1c             S   s   | S )Nr
   )rn   r
   r
   r   	quote_bat.  s    z/EnvBuilder.replace_variables.<locals>.quote_batz.ps1z.batc                s   i | ]\}} ||qS r
   r
   )r^   keyrn   )quoter
   r   
<dictcomp><  s    z0EnvBuilder.replace_variables.<locals>.<dictcomp>)r   r5   r   r@   rA   shlexrr   script_pathrP   itemsrm   )	r	   textr   Zreplacementsro   rp   ru   rq   Zquotedr
   )rr   r   replace_variables  s$    



zEnvBuilder.replace_variablesc          !   C   s  |j }t|}xtj|D ]~\}}}||kr`x,|d d  D ]}|dtjfkr>|j| q>W qx8|D ].}	tjj||	}
||d  jtj	dd  }|s|}ntjj|f| }tjj
|stj| tjj||	}t|
d}	|	j }W d Q R X |
jdsd|
|_y$|jd}| j||}|jd}W n6 tk
rb } zd }tjd|
| W Y d d }~X nX |d k	rht|d}	|	j| W d Q R X tj|
| qhW qW d S )Ncommonr.   rbz.exezutf-8z+unable to copy script %r, may be binary: %swb)r?   lenr   ra   r=   r   r   r   r4   sepr"   r#   rI   readrP   ru   decoderx   encodeUnicodeErrorrV   rW   rJ   r   Zcopymode)r	   r   r   rD   Zplenrd   re   rc   r%   rK   Zsrcfilerb   ZdstdirZdstfiledataer
   r
   r   rk   A  sB    

zEnvBuilder.install_scripts)FFFFFN)F)__name__
__module____qualname__r   r   r!   r   r   r   r=   rS   r\   r   r   r   r   rx   rk   r
   r
   r
   r   r      s    
8

3	
0r   Fc             C   s    t |||||d}|j|  d S )N)r   r   r   r   r   )r   r   )r   r   r   r   r   r   builderr
   r
   r   r   r  s    r   c       	      C   sb  d}t jd*k rd}ntt ds"d}|s2tdn,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rd}nd}|j
 }|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| }|jr"|jr"td(t|j|j|j|j|j|jd)}x|jD ]}|j| qJW d S )+NTrH   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.)progZdescriptionZepilogre   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   rL   z
--symlinksr   z[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--clearr   zcDelete the contents of the environment directory if it already exists, before environment creation.z	--upgrader   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   z1you cannot supply --upgrade and --clear together.)r   r   r   r   r   r   )rH   rH   )r7   r;   hasattrr$   argparseArgumentParserr   add_argumentr   r=   Zadd_mutually_exclusive_group
parse_argsr   r   r   r   r   r   r   re   r   )	argsZ
compatibler   parserZuse_symlinksgroupZoptionsr   r%   r
   r
   r   mainz  s\    










r   __main__r'   z	Error: %s)file)FFFFN)N)Zloggingr   r   rg   r7   r2   rt   Z	getLoggerr   rV   r   r   r   ZrcrU   r   printrf   exitr
   r
   r
   r   <module>   s*   
  b 

H$