Your IP : 18.221.217.100
U
e5dFR �
@ s� d Z ddlZddlZddlZddlZddlZddlZddlZe�e �Z
G dd� d�Zddd�Zddd �Z
e d
kr�dZze
� dZW n4 ek
r� Z zede ejd
� W 5 dZ[X Y nX e�e� dS )z�
Virtual environment (venv) package for Python. Based on PEP 405.
Copyright (C) 2011-2014 Vinay Sajip.
Licensed to the PSF under a contributor agreement.
� Nc @ s� e Zd ZdZddd�Zdd� Zdd � Zd
d� Zdd
� Ze j
dkrLddd�Zn
d dd�Zdd� Zdd� Z
dd� Zdd� Zdd� Zdd� ZdS )!�
EnvBuildera�
This class exists to allow virtual environment creation to be
customized. The constructor parameters determine the builder's
behaviour when called upon to create a virtual environment.
By default, the builder makes the system (global) site-packages dir
*un*available to the created environment.
If invoked using the Python -m option, the default is to use copying
on Windows platforms but symlinks elsewhere. If instantiated some
other way, the default is to *not* use symlinks.
:param system_site_packages: If True, the system (global) site-packages
dir is available to created environments.
:param clear: If True, delete the contents of the environment directory if
it already exists, before environment creation.
:param symlinks: If True, attempt to symlink rather than copy files into
virtual environment.
:param upgrade: If True, upgrade an existing virtual environment.
:param with_pip: If True, ensure pip is installed in the virtual
environment
:param prompt: Alternative terminal prefix for the environment.
FNc C s( || _ || _|| _|| _|| _|| _d S �N��system_site_packages�clear�symlinks�upgrade�with_pip�prompt)�selfr r r r r r
� r �%/usr/lib64/python3.8/venv/__init__.py�__init__+ s zEnvBuilder.__init__c C sx t j�|�}| �|�}| j}d| _| �|� | �|� | jrF| �|� | j s`| �
|� | �|� |rtd| _| �|� dS )z�
Create a virtual environment in a directory.
:param env_dir: The target directory to create an environment in.
FTN)�os�path�abspath�ensure_directoriesr �create_configuration�setup_pythonr �
_setup_pipr �
setup_scripts�
post_setup)r �env_dir�contextZtrue_system_site_packagesr r r
�create4 s
zEnvBuilder.createc C s\ t �|�D ]L}t j�||�}t j�|�s4t j�|�r@t �|� q
t j�|�r
t� |� q
d S r )
r �listdirr �join�islink�isfile�remove�isdir�shutilZrmtree)r r �fnr r r
�clear_directoryN s zEnvBuilder.clear_directoryc C s� dd� }t j�|�r$| jr$| �|� t�� }||_t j�|�d |_ | j
dk rT| j
n|j }d| |_
||� tj}t j�t j�
|��\}}||_||_||_tjdkr�d}d} t j�|d d
�}
n(d}d} t j�|d
dtjdd� d
�}
t j�|| � |_}||� ||
� tjdk�rXt jdk�rXtjdk�rXt j�|d�}t j�|��sXt �d
|� t j�||� |_}
||_t j�|
|�|_||
� |S )z�
Create the directories for the environment.
Returns a context object which holds paths in the environment,
for use by subsequent logic.
c S s@ t j�| �st �| � n$t j�| �s0t j�| �r<td| ��d S )NzUnable to create directory %r)r r �exists�makedirsr r �
ValueError)�dr r r
�create_if_needed^ s z7EnvBuilder.ensure_directories.<locals>.create_if_needed� Nz(%s) Zwin32ZScriptsZInclude�Libz
site-packages�binZinclude�libzpython%d.%d� l �posix�darwin�lib64)r r r$ r r# �types�SimpleNamespacer �split�env_namer
�sys�_base_executabler �
executable�
python_dirZ
python_exe�platformr �version_infoZinc_path�maxsize�name�symlink�bin_path�bin_name�env_exe)r r r( r r
r7 �dirnameZexenameZbinnameZincpathZlibpathr Z link_path�binpathr r r
r V sL
��zEnvBuilder.ensure_directoriesc C s� t j�|jd� |_}t|ddd��j}|�d|j � | jrBd}nd}|�d| � |�d t j
d
d� � | jd
k r�|�d| j�d
�� W 5 Q R X d
S )aA
Create a configuration file indicating where the environment's Python
was copied from, and whether the system site-packages should be made
available in the environment.
:param context: The information for the environment creation request
being processed.
z
pyvenv.cfg�w�utf-8)�encodingz
home = %s
�trueZfalsez"include-system-site-packages = %s
zversion = %d.%d.%d
N� z prompt = �
)r r r r Zcfg_path�open�writer8 r r5 r: r
)r r r �fZinclr r r
r � s
zEnvBuilder.create_configuration�ntc C s~ | j }|sjz6tj�|�s@|r4t�tj�|�|� nt�||� W n& tk
rh t�d||� d}Y nX |rzt �
||� dS )�Y
Try symlinking a file, and if that fails, fall back to copying.
�Unable to symlink %r to %rTN)r r r r r= �basename� Exception�logger�warningr! �copyfile)r �src�dst�relative_symlinks_okZ
force_copyr r r
�symlink_or_copy� s
zEnvBuilder.symlink_or_copyc C s\ t j�|�ot j�|� }| jr�|s�t j�|�s�z,|rLt �t j�|�|� nt �||� W dS tk
r~ t �
d||� Y nX t j�t j�|��\}}t j�t j�
t�dd|| �}t�d�s�t j�|��s$|�d�r�d| }|dd� }|dkr�d }n|d
k�rd}t j�t j�
|�|| �}n|}t j�|��sL|�sHt �
d|� dS t�||� dS )
rM NrN �scriptsrL TZ_d����pythonZvenvlauncherZpythonwZ
venvwlauncherzUnable to copy %r)r r �lexistsr$ r r r= rO rP rQ rR �splitextr rA �__file__� sysconfig�is_python_buildr �endswithr! rS )r rT rU rV Zbad_srcrO ZextZsrcfnr r r
rW � s<