a
    Sic'                     @   sd  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 ddl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/Z0G dd dZ1e2dddZ3ee2 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)	get_paths)TracebackType)TYPE_CHECKINGIterableListOptionalSetTupleType)where)Requirement)Version)__file__)open_spinner)get_platlibget_prefixed_libsget_purelib)get_default_environmentget_environment)call_subprocess)TempDirectorytempdir_kinds)PackageFinderc                   @   s   e Zd ZeddddZdS )_PrefixN)pathreturnc                 C   s@   || _ d| _ttjdkrdnd||ddd | _t|| _d S )NFntZposix_prefix)baseZplatbase)varsscripts)r   setupr   osnamebin_dirr   lib_dirs)selfr    r'   S/var/www/html/django/DPS/env/lib/python3.9/site-packages/pip/_internal/build_env.py__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_dirr-   r"   fsdecode)sourcer'   r'   r(   get_runnable_pip+   s    r7   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'   )r"   r   normcase).0r   r'   r'   r(   	<setcomp>L       z+_get_system_sitepackages.<locals>.<setcomp>)hasattrsiter8   r   r   )system_sitesr'   r'   r(   _get_system_sitepackages;   s    	

r@   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 depsNr.   c                    s   t tjdd t fdddD | _g | _g | _tt| j	 D ] }| j
|j | j|j qDt }tj jd| _tj| jst| j ttj| jddd	d
,}|tdj|| jd W d    n1 s0    Y  d S )NT)kindZglobally_managedc                 3   s&   | ]}|t tj j|fV  qd S N)r   r"   r   joinr:   r#   Ztemp_dirr'   r(   	<genexpr>U   s   z,BuildEnvironment.__init__.<locals>.<genexpr>)ZnormalZ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)
                )r?   r%   )r   r   Z	BUILD_ENVr   	_prefixes	_bin_dirs	_lib_dirsreversedlistvaluesappendr$   extendr%   r@   r"   r   rD   	_site_direxistsmkdiropenwritetextwrapdedentformat)r&   prefixr?   fpr'   rF   r(   r)   R   s0    
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 rC   )r"   environgetrE   r'   r'   r(   
<dictcomp>   s   z.BuildEnvironment.__enter__.<locals>.<dictcomp>)PATHZPYTHONNOUSERSITEZ
PYTHONPATHr_   1)
	_save_envrK   rQ   splitr"   pathseprR   r\   updaterD   )r&   r   Zold_pathZ
pythonpathr'   r'   r(   	__enter__   s    


zBuildEnvironment.__enter__exc_typeexc_valexc_tbr   c                 C   s:   | j  D ]*\}}|d u r*tj|d  q
|tj|< q
d S rC   )ra   itemsr"   r\   pop)r&   rg   rh   ri   Zvarname	old_valuer'   r'   r(   __exit__   s    zBuildEnvironment.__exit__)reqsr   c           	      C   s   t  }t  }|rt| dr$t| jnt }|D ]}t|}|jdurV|jddisVq.||j	}|sr|
| q.t|jtr|j	 d|j }n|j	 d|j }|jj|jdds.|
||f q.||fS )	zReturn 2 sets:
        - conflicting requirements: set of (installed, wanted) reqs tuples
        - missing requirements: set of reqs
        rL   Nextra z==z===T)Zprereleases)setr=   r   rL   r   r   ZmarkerZevaluateZget_distributionr#   add
isinstanceversionr   Z	specifiercontains)	r&   rn   missingZconflictingenvZreq_strZreqdistZinstalled_req_strr'   r'   r(   check_requirements   s*    
z#BuildEnvironment.check_requirementsr   finderrequirementsprefix_as_stringrB   r   c                C   s<   | j | }|jrJ d|_|s"d S | jt ||||d d S )NT)rB   )rJ   r!   _install_requirementsr7   )r&   r{   r|   r}   rB   rZ   r'   r'   r(   install_requirements   s    

z%BuildEnvironment.install_requirements)pip_runnabler{   r|   rZ   rB   r   c                C   sv  t j| dddd|jdg}t tjkr0|d dD ]:}t|j	|}|
d|d	d
 dt|pddhf q4|j}|r|
d|d g |dd  D ]}	|
d|	g qn
|d |jD ]}
|
d|
g q|jD ]}|
d|g q|jr|d |jr|d |d |
| dt i}td| &}t|d| ||d W d    n1 sh0    Y  d S )Ninstallz--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz-v)Z	no_binaryZonly_binaryz--_-,z:none:z-ir      z--extra-index-urlz
--no-indexz--find-linksz--trusted-hostz--prez--prefer-binaryZ_PIP_STANDALONE_CERTzInstalling zpip subprocess to install )Zcommand_descspinnerextra_environ)sys
executabler   loggergetEffectiveLevelloggingDEBUGrP   getattrformat_controlrQ   replacerD   sorted
index_urlsZ
find_linksZtrusted_hostsZallow_all_prereleasesZprefer_binaryr   r   r   )r   r{   r|   rZ   rB   argsr   Zformatsr   Zextra_indexlinkZhostr   r   r'   r'   r(   r~      sT    










z&BuildEnvironment._install_requirements)r*   r+   r,   __doc__r)   re   r   r   BaseExceptionr   rm   r   r-   r
   r	   ry   r   staticmethodr   r~   r'   r'   r'   r(   rA   O   s2   6
$rA   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 BuildEnvironmentNr.   c                 C   s   d S rC   r'   r&   r'   r'   r(   r)     s    zNoOpBuildEnvironment.__init__c                 C   s   d S rC   r'   r   r'   r'   r(   re      s    zNoOpBuildEnvironment.__enter__rf   c                 C   s   d S rC   r'   )r&   rg   rh   ri   r'   r'   r(   rm   #  s    zNoOpBuildEnvironment.__exit__c                 C   s   d S rC   r'   r   r'   r'   r(   cleanup+  s    zNoOpBuildEnvironment.cleanupr   rz   c                C   s
   t  d S rC   )NotImplementedError)r&   r{   r|   r}   rB   r'   r'   r(   r   .  s    z)NoOpBuildEnvironment.install_requirements)r*   r+   r,   r   r)   re   r   r   r   r   rm   r   r   r-   r   r'   r'   r'   r(   r     s   
r   )7r   r   r"   r/   r>   r   rW   collectionsr   Z	sysconfigr   typesr   typingr   r   r   r   r	   r
   r   Zpip._vendor.certifir   Z"pip._vendor.packaging.requirementsr   Zpip._vendor.packaging.versionr   pipr   r1   Zpip._internal.cli.spinnersr   Zpip._internal.locationsr   r   r   pip._internal.metadatar   r   Zpip._internal.utils.subprocessr   Zpip._internal.utils.temp_dirr   r   Z"pip._internal.index.package_finderr   	getLoggerr*   r   r   r-   r7   r@   rA   r   r'   r'   r'   r(   <module>   s8   $
 L