3 �L�jqM�@s�ddlZddlZddlZddlZddlZddlZddlZeje�Z Gdd�d�Z d dd�Z ddd�Z ed kr�d Z ye �dZ Wn4ek r�Zzed eejd �WYddZ[XnXeje �dS)�Nc@s�eZdZddd�Zdd�Zdd�Zd d �Zd d �Zej d krDdd�Z ddd�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�ZdS) � EnvBuilderFNcCs(||_||_||_||_||_||_dS)N)�system_site_packages�clear�symlinks�upgrade�with_pip�prompt)�selfrrrrrr�r �%/usr/lib64/python3.6/venv/__init__.py�__init__+s zEnvBuilder.__init__cCsxtjj|�}|j|�}|j}d|_|j|�|j|�|jrF|j|�|j s`|j |�|j |�|rtd|_|j|�dS)NFT) �os�path�abspath�ensure_directoriesr�create_configuration� setup_pythonr� _setup_pipr� setup_scripts� post_setup)r �env_dir�contextZtrue_system_site_packagesr r r �create4s       zEnvBuilder.createcCs`xZtj|�D]L}tjj||�}tjj|�s6tjj|�rBtj|�q tjj|�r tj |�q WdS)N) r �listdirr�join�islink�isfile�remove�isdir�shutilZrmtree)r r�fnr r r �clear_directoryNs   zEnvBuilder.clear_directorycCs�dd�}tjj|�r$|jr$|j|�tj�}||_tjj|�d|_ |j dk rT|j n|j }d||_ ||�tj }t j dkr�d|kr�tj d}nt j}tjjtjj|��\}}||_||_||_t j dkr�d} d } tjj|d d �} n(d } d } tjj|ddt jdd�d �} tjj|| �|_} || �|| �t jdk�r|tjdk�r|t j dk�r|tjj|d�} tjj| ��s|tjd| �tjj|| �|_}| |_tjj||�|_||�|S)NcSs@tjj|�stj|�n$tjj|�s0tjj|�r.create_if_needed�z(%s) �darwin�__PYVENV_LAUNCHER__Zwin32ZScriptsZInclude�Libz site-packages�bin�include�libz python%d.%d�� �posix�lib64l)r rr"rr!�types�SimpleNamespacer�split�env_namer�environ�sys�platform� executabler� python_dirZ python_exer� version_infoZinc_path�maxsize�name�symlink�bin_path�bin_name�env_exe)r rr&rr�envr9�dirnameZexenameZbinnameZincpathZlibpathrZ link_path�binpathr r r rVsN       zEnvBuilder.ensure_directoriesc Csztjj|jd�|_}t|ddd��L}|jd|j�|jrBd}nd}|jd|�|jd t j dd ��WdQRXdS) Nz pyvenv.cfg�wzutf-8)�encodingz home = %s �trueZfalsez"include-system-site-packages = %s zversion = %d.%d.%d �) r rrrZcfg_path�open�writer:rr7r;)r rr�fZinclr r r r�s zEnvBuilder.create_configuration�ntcCs(|jd�rd}n|jd�o"|jd�}|S)N�.pyd�.dllT�pythonz.exe)rMrN)�endswith� startswith)r rK�resultr r r �include_binary�s zEnvBuilder.include_binaryc Cs~|j }|sjy6tjj|�s@|r4tjtjj|�|�n tj||�Wn&tk rhtjd||�d}YnX|rzt j ||�dS)NzUnable to symlink %r to %rT) rr rrr>�basename� Exception�logger�warningr�copyfile)r �src�dst�relative_symlinks_okZ force_copyr r r �symlink_or_copy�s  zEnvBuilder.symlink_or_copycs�|j}|j}|j}||j|�|j}tjdkr�tjj|�sFtj |d�xNd D]F}tjj ||�}tjj |�sL||j|dd�tjj|�sLtj |d�qLW�nRd}|j ��fdd �tj |�D�}x<|D]4} tjj || �} tjj || �} | |jkr�|| | �q�Wtjj ||�}tjj|��rd�fd d �tj |�D�}x4|D],} tjj || �} tjj || �} || | ��q4Wx�tj|j�D]v\} } }d |k�rrtjj| �}tjj |jd |�}tjj |��s�tj|�tjj | d �} tjj |d �} tj| | �P�qrWdS)NrLi�rO�python3T)r[ZDLLscsg|]}�|�r|�qSr r )�.0rK)r,r r � �sz+EnvBuilder.setup_python..csg|]}�|�r|�qSr r )r^rK)r,r r r_�szinit.tclr*)rOr])r?rAr\r9r:r r=rr�chmodrr"rSrr�walkrTrr#rrX)r rrDrZcopierrC�suffixZsubdir�filesrKrYrZ�root�dirsZtcldirr )r,r r�sN              zEnvBuilder.setup_pythoncCs$|jddddg}tj|tjd�dS)Nz-ImZ ensurepipz --upgradez --default-pip)�stderr)rA� subprocessZ check_outputZSTDOUT)r r�cmdr r r r�s zEnvBuilder._setup_pipcCs2tjjtjjt��}tjj|d�}|j||�dS)N�scripts)r rrrC�__file__r�install_scripts)r rrr r r r�s zEnvBuilder.setup_scriptscCsdS)Nr )r rr r r rszEnvBuilder.post_setupc s�|j|j|j|j|jd�}dd�}dd�}tj�|j}|jd�rF|�n|jd�rV|�ntj��fdd �|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__cSs|jdd�}d|�d�S)N�'z'')�replace)�sr r r � quote_ps1$s z/EnvBuilder.replace_variables..quote_ps1cSs|S)Nr )rnr r r � quote_bat.sz/EnvBuilder.replace_variables..quote_batz.ps1z.batcsi|]\}}�|�|�qSr r )r^�keyrn)�quoter r � <sz0EnvBuilder.replace_variables..) rr5rr@rA�shlexrr� script_pathrP�itemsrm) r �textrZ replacementsrorprurqZquotedr )rrr �replace_variabless$     zEnvBuilder.replace_variablesc!Cs�|j}t|�}�x�tj|�D�]~\}}}||kr`x,|dd�D]}|dtjfkr>|j|�q>Wq�x8|D�].} tjj|| �} ||d�jtj �dd�} | s�|} ntjj|f| ��} tjj | �s�tj | �tjj| | �} t | d��} | j �}WdQRX| jd��sd| |_y$|jd�}|j||�}|jd�}Wn6tk �rb}zd}tjd| |�WYdd}~XnX|dk rht | d��} | j|�WdQRXtj| | �qhWqWdS)N�commonr.�rbz.exezutf-8z+unable to copy script %r, may be binary: %s�wb)r?�lenr rar=rrrr4�sepr"r#rI�readrPru�decoderx�encode� UnicodeErrorrVrWrJrZcopymode)r rrrDZplenrdrercr%rKZsrcfilerbZdstdirZdstfile�data�er r r rkAsB        zEnvBuilder.install_scripts)FFFFFN)F)�__name__� __module__� __qualname__r rr!rrr r=rSr\rrrrrxrkr r r r rs 8  3  0rFcCs t|||||d�}|j|�dS)N)rrrrr)rr)rrrrrr�builderr r r rrsrc Csbd}tjd*krd}nttd�s"d}|s2td���n,ddl}|jtddd �}|jd d d d d�|jdddddd�tj dkr�d}nd}|j �}|jd|dddd�|jd| dddd�|jdddddd�|jddddd d�|jd!d"ddd#d$�|jd%d&d'�|j |�}|j �r"|j �r"td(��t|j|j |j|j |j|jd)�}x|jD]}|j|��qJWdS)+NTrHF� 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 descriptionZepilogreZENV_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�rLz --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.z --upgraderzlUpgrade the environment directory to use this version of Python, assuming Python has been upgraded in-place.z --without-piprz]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.)rrrrrr)rHrH)r7r;�hasattrr$�argparse�ArgumentParserr�� add_argumentr r=Zadd_mutually_exclusive_group� parse_argsrrrr�rrrrer) �argsZ compatibler��parserZ use_symlinks�groupZoptionsr�r%r r r �mainzs\             r��__main__r'z Error: %s)�file)FFFFN)N)Zloggingr rrgr7r2rtZ getLoggerr�rVrrr�ZrcrUr��printrf�exitr r r r �s* b  H$