B
    od(                 @   s  d 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mZ ddl	m
Z
 ddlmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlm Z m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z* erddl+m,Z, e-e.Z/e0e0eee0 ee0e0f f dddZ1G dd dZ2e0dddZ3ee0 dddZ4G dd dZ5G dd de5Z6dS )z;Build Environment used for isolation during sdist building
    N)OrderedDict)TracebackType)TYPE_CHECKINGIterableListOptionalSetTupleTypeUnion)where)Requirement)Version)__file__)open_spinner)get_platlibget_purelib
get_scheme)get_default_environmentget_environment)call_subprocess)TempDirectorytempdir_kinds)PackageFinder)abreturnc             C   s   | |kr| |fS | fS )N )r   r   r   r   I/var/www/html/venv/lib/python3.7/site-packages/pip/_internal/build_env.py_dedup   s    r   c               @   s   e Zd ZeddddZdS )_PrefixN)pathr   c             C   s4   || _ d| _td|d}|j| _t|j|j| _d S )NF )prefix)	r!   setupr   scriptsbin_dirr   purelibplatliblib_dirs)selfr!   schemer   r   r   __init__$   s
    z_Prefix.__init__)__name__
__module____qualname__strr,   r   r   r   r   r    #   s   r    )r   c              C   s.   t t j} |  s t| S t| d S )zGet a file to pass to a Python executable, to run the currently-running pip.

    This is used to run a pip subprocess, for installing requirements into the build
    environment.
    z__pip-runner__.py)	pathlibPathpip_locationresolveparentis_dirr0   osfsdecode)sourcer   r   r   get_runnable_pip,   s    r:   c              C   s.   t tdrt } nt t g} dd | D S )zGet system site packages

    Usually from site.getsitepackages,
    but fallback on `get_purelib()/get_platlib()` if unavailable
    (e.g. in a virtualenv created by virtualenv<20)

    Returns normalized set of strings.
    getsitepackagesc             S   s   h | ]}t j|qS r   )r7   r!   normcase).0r!   r   r   r   	<setcomp>M   s    z+_get_system_sitepackages.<locals>.<setcomp>)hasattrsiter;   r   r   )system_sitesr   r   r   _get_system_sitepackages<   s    	

rB   c               @   s   e Zd ZdZddddZddddZeee  ee ee	 ddd	d
Z
ee eeeeef  ee f dddZdee eeddddZeedee eeddddZdS )BuildEnvironmentzACreates and manages an isolated environment to install build depsN)r   c          	      s   t tjdd t fdddD | _g | _g | _x6tt| j	 D ] }| j
|j | j|j qFW t }tj jd| _tj| jst| j ttj| jddd	d
"}|tdj|| jd W d Q R X d S )NT)kindglobally_managedc             3   s&   | ]}|t tj j|fV  qd S )N)r    r7   r!   join)r=   name)temp_dirr   r   	<genexpr>W   s   z,BuildEnvironment.__init__.<locals>.<genexpr>)normaloverlayr@   zsitecustomize.pywzutf-8)encodinga  
                import os, site, sys

                # First, drop system-sites related paths.
                original_sys_path = sys.path[:]
                known_paths = set()
                for path in {system_sites!r}:
                    site.addsitedir(path, known_paths=known_paths)
                system_paths = set(
                    os.path.normcase(path)
                    for path in sys.path[len(original_sys_path):]
                )
                original_sys_path = [
                    path for path in original_sys_path
                    if os.path.normcase(path) not in system_paths
                ]
                sys.path = original_sys_path

                # Second, add lib directories.
                # ensuring .pth file are processed.
                for path in {lib_dirs!r}:
                    assert not path in sys.path
                    site.addsitedir(path)
                )rA   r)   )r   r   	BUILD_ENVr   	_prefixes	_bin_dirs	_lib_dirsreversedlistvaluesappendr&   extendr)   rB   r7   r!   rF   	_site_direxistsmkdiropenwritetextwrapdedentformat)r*   r#   rA   fpr   )rH   r   r,   S   s(    
zBuildEnvironment.__init__c             C   sn   dd dD | _ | jd d  }| j d }|r>||tj | jg}tjtj	|dtj	|d d S )Nc             S   s   i | ]}t j|d |qS )N)r7   environget)r=   rG   r   r   r   
<dictcomp>   s   z.BuildEnvironment.__enter__.<locals>.<dictcomp>)PATHPYTHONNOUSERSITE
PYTHONPATHrc   1)
	_save_envrP   rV   splitr7   pathseprW   r`   updaterF   )r*   r!   old_path
pythonpathr   r   r   	__enter__   s    


zBuildEnvironment.__enter__)exc_typeexc_valexc_tbr   c             C   s>   x8| j  D ]*\}}|d kr,tj|d  q|tj|< qW d S )N)rg   itemsr7   r`   pop)r*   rn   ro   rp   varname	old_valuer   r   r   __exit__   s    zBuildEnvironment.__exit__)reqsr   c       	      C   s   t  }t  }|rt| dr$t| jnt }x|D ]}t|}|jdk	rX|jddisXq0||j	}|st|
| q0t|jtr|j	 d|j }n|j	 d|j }|jj|jdds0|
||f q0W ||fS )	zReturn 2 sets:
        - conflicting requirements: set of (installed, wanted) reqs tuples
        - missing requirements: set of reqs
        rQ   Nextrar"   z==z===T)prereleases)setr?   r   rQ   r   r   markerevaluateget_distributionrG   add
isinstanceversionr   	specifiercontains)	r*   rv   missingconflictingenvreq_strreqdistinstalled_req_strr   r   r   check_requirements   s&    

z#BuildEnvironment.check_requirementsr   )finderrequirementsprefix_as_stringrD   r   c            C   s<   | j | }|jrtd|_|s"d S | jt ||||d d S )NT)rD   )rO   r$   AssertionError_install_requirementsr:   )r*   r   r   r   rD   r#   r   r   r   install_requirements   s    

z%BuildEnvironment.install_requirements)pip_runnabler   r   r#   rD   r   c         	   C   sr  t j| dddd|jdg}t tjkr0|d xBdD ]:}t|j	|}|
d|d	d
 dt|pfdhf q6W |j}|r|
d|d g x.|dd  D ]}	|
d|	g qW n
|d x|jD ]}
|
d|
g qW x|jD ]}|
d|g qW |jr|d |jr |d |d |
| dt i}td| }t|d| ||d W d Q R X d S )Ninstallz--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz-v)	no_binaryonly_binaryz--_-,z:none:z-ir      z--extra-index-urlz
--no-indexz--find-linksz--trusted-hostz--prez--prefer-binary_PIP_STANDALONE_CERTzInstalling zpip subprocess to install )command_descspinnerextra_environ)sys
executabler!   loggergetEffectiveLevelloggingDEBUGrU   getattrformat_controlrV   replacerF   sorted
index_urls
find_linkstrusted_hostsallow_all_prereleasesprefer_binaryr   r   r   )r   r   r   r#   rD   argsr   formatsr   extra_indexlinkhostr   r   r   r   r   r      sL    








z&BuildEnvironment._install_requirements)r-   r.   r/   __doc__r,   rm   r   r
   BaseExceptionr   ru   r   r0   r	   r   r   r   staticmethodr    r   r   r   r   r   rC   P   s*   6
&"rC   c               @   sx   e Zd ZdZddddZddddZeee  ee ee	 ddd	d
Z
ddddZdee eeddddZdS )NoOpBuildEnvironmentz0A no-op drop-in replacement for BuildEnvironmentN)r   c             C   s   d S )Nr   )r*   r   r   r   r,     s    zNoOpBuildEnvironment.__init__c             C   s   d S )Nr   )r*   r   r   r   rm   !  s    zNoOpBuildEnvironment.__enter__)rn   ro   rp   r   c             C   s   d S )Nr   )r*   rn   ro   rp   r   r   r   ru   $  s    zNoOpBuildEnvironment.__exit__c             C   s   d S )Nr   )r*   r   r   r   cleanup,  s    zNoOpBuildEnvironment.cleanupr   )r   r   r   rD   r   c            C   s
   t  d S )N)NotImplementedError)r*   r   r   r   rD   r   r   r   r   /  s    z)NoOpBuildEnvironment.install_requirements)r-   r.   r/   r   r,   rm   r   r
   r   r   ru   r   r   r0   r   r   r   r   r   r     s   
r   )7r   r   r7   r1   r@   r   r\   collectionsr   typesr   typingr   r   r   r   r   r	   r
   r   pip._vendor.certifir   "pip._vendor.packaging.requirementsr   Zpip._vendor.packaging.versionr   pipr   r3   pip._internal.cli.spinnersr   pip._internal.locationsr   r   r   pip._internal.metadatar   r   pip._internal.utils.subprocessr   pip._internal.utils.temp_dirr   r   "pip._internal.index.package_finderr   	getLoggerr-   r   r0   r   r    r:   rB   rC   r   r   r   r   r   <module>   s8   (
&	 L