
    h(              
          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mZm Z  ddl!m"Z"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z, erddl-m.Z.  ej^                  e0      Z1de2de2deee2   ee2e2f   f   fdZ3 G d d      Z4de2fdZ5dee2   fdZ6 G d d      Z7 G d de7      Z8y)z;Build Environment used for isolation during sdist building
    N)OrderedDict)TracebackType)TYPE_CHECKINGIterableListOptionalSetTupleTypeUnion)where)Version)__file__)open_spinner)get_platlibget_purelib
get_scheme)get_default_environmentget_environment)VERBOSE)get_requirement)call_subprocess)TempDirectorytempdir_kinds)PackageFinderabreturnc                     | |k7  r| |fS | fS N )r   r   s     @D:\EasyAligner\venv\Lib\site-packages\pip/_internal/build_env.py_dedupr#       s    !VAq6%!%    c                       e Zd ZdeddfdZy)_Prefixpathr   Nc                     || _         d| _        t        d|      }|j                  | _        t        |j                  |j                        | _        y )NF )prefix)	r'   setupr   scriptsbin_dirr#   purelibplatliblib_dirs)selfr'   schemes      r"   __init__z_Prefix.__init__%   s=    	
Bt,~~v~~v~~>r$   )__name__
__module____qualname__strr3   r!   r$   r"   r&   r&   $   s    ?S ?T ?r$   r&   c                      t        j                  t              j                         j                  } | j                         st        |       S t        j                  | dz        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_dirr7   osfsdecode)sources    r"   get_runnable_piprB   -   sK     \\,'//188F==? 6{;;v 3344r$   c                      t        t        d      rt        j                         } nt               t	               g} | D ch c]!  }t
        j                  j                  |      # c}S c c}w )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.
    getsitepackages)hasattrsiterD   r   r   r?   r'   normcase)system_sitesr'   s     r"   _get_system_sitepackagesrI   =   sT     t&'++- ${}5/;<|tBGGT"|<<<s   &A'c                       e Zd ZdZddZddZdeee      dee   dee	   ddfd	Z
d
ee   deeeeef      ee   f   fdZdddee   dededdf
dZededddee   dededdfd       Zy)BuildEnvironmentzACreates and manages an isolated environment to install build depsr   Nc                    t        t        j                  d      t        fddD              | _        g | _        g | _        t        t        | j                  j                                     D ]L  }| j
                  j                  |j                         | j                  j                  |j                         N t               }t        j                   j#                  j                   d      | _        t        j                   j'                  | j$                        st        j(                  | j$                         t+        t        j                   j#                  | j$                  d      dd	      5 }|j-                  t/        j0                  d
      j3                  || j                               d d d        y # 1 sw Y   y xY w)NT)kindglobally_managedc              3      K   | ]9  }|t        t        j                  j                  j                  |            f ; y wr    )r&   r?   r'   join).0nametemp_dirs     r"   	<genexpr>z,BuildEnvironment.__init__.<locals>.<genexpr>W   s6      %
- 7277<<t<=>-s   ?A)normaloverlayrF   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)
                )rH   r0   )r   r   	BUILD_ENVr   	_prefixes	_bin_dirs	_lib_dirsreversedlistvaluesappendr-   extendr0   rI   r?   r'   rP   	_site_direxistsmkdiropenwritetextwrapdedentformat)r1   r*   rH   fprS   s       @r"   r3   zBuildEnvironment.__init__T   s;    m&=&=PTU$ %
-%
 

 %'$&tDNN$9$9$;<=FNN!!&..1NN!!&//2 > 01hmmV<ww~~dnn-HHT^^$GGLL);<cG
HH2 &lT^^&L5
 
 
s   6A F??Gc                    dD ci c]#  }|t         j                  j                  |d       % c}| _        | j                  d d  }| j                  d   }|r.|j                  |j                  t         j                               | j                  g}t         j                  j                  t         j                  j                  |      dt         j                  j                  |      d       y c c}w )N)PATHPYTHONNOUSERSITE
PYTHONPATHrl   1)r?   environget	_save_envr[   ra   splitpathseprb   updaterP   )r1   rR   r'   old_path
pythonpaths        r"   	__enter__zBuildEnvironment.__enter__   s     C
B "**..t,,B

 ~~a >>&)KKrzz23nn%





-$' jjooj9	

s   (C.exc_typeexc_valexc_tbc                     | j                   j                         D ];  \  }}|!t        j                  j	                  |d        )|t        j                  |<   = y r    )rr   itemsr?   rp   pop)r1   ry   rz   r{   varname	old_values         r"   __exit__zBuildEnvironment.__exit__   sF     #'.."6"6"8GY 

w-&/

7#	 #9r$   reqsc                 |   t               }t               }|r"t        | d      rt        | j                        n	t	               }|D ]  }t        |      }|j                  |j                  j                  ddi      s8|j                  |j                        }|s|j                  |       gt        |j                  t              r|j                   d|j                   }n|j                   d|j                   }|j                  j                  |j                  d      r|j                  ||f        ||fS )zReturn 2 sets:
        - conflicting requirements: set of (installed, wanted) reqs tuples
        - missing requirements: set of reqs
        r\   extrar)   z==z===T)prereleases)setrE   r   r\   r   r   markerevaluateget_distributionrR   add
isinstanceversionr   	specifiercontains)	r1   r   missingconflictingenvreq_strreqdistinstalled_req_strs	            r"   check_requirementsz#BuildEnvironment.check_requirements   s    %e 4-  /,. 
  %g. ::)#**2E2EwPRm2T++CHH5KK(dllG4+.88*Bt||n(E%+.88*C~(F%}}--dll-MOO%6$@A  " G##r$   finderr   requirementsprefix_as_stringrM   c                    | j                   |   }|j                  rJ d|_        |sy | j                  t               ||||       y )NT)rM   )rZ   r+   _install_requirementsrB   )r1   r   r   r   rM   r*   s         r"   install_requirementsz%BuildEnvironment.install_requirements   sR      01<<"" 	# 	
r$   pip_runnabler*   c          
      @   t         j                  | dddd|j                  ddg	}t        j	                         t
        j                  k  r|j                  d       n,t        j	                         t        k  r|j                  d       d	D ][  }t        |j                  |      }|j                  d
|j                  dd      z   dj                  t        |xs dh            f       ] |j                  }|r4|j                  d|d   g       |dd  D ]  }	|j                  d|	g        n|j                  d       |j                   D ]  }
|j                  d|
g        |j"                  D ]  }|j                  d|g        |j$                  r|j                  d       |j&                  r|j                  d       |j                  d
       |j                  |       dt)               i}t+        d|       5 }t-        |d| ||       d d d        y # 1 sw Y   y xY w)Ninstallz--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz--disable-pip-version-checkz-vvz-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DEBUGr`   r   getattrformat_controlra   replacerP   sorted
index_urls
find_linkstrusted_hostsallow_all_prereleasesprefer_binaryr   r   r   )r   r   r   r*   rM   argsr   formatsr   extra_indexlinkhostr   r   s                 r"   r   z&BuildEnvironment._install_requirements   s    NN KK')

 ##%6KK%%'72KK:Nf33^DGKK>11#s;;HHVG$9z:; ; &&
KKz!}-.)!"~0+>?  . KK%%%DKK./ & ((DKK)401 )''KK KK)*DL!/9Kv./79$@+	 0//s   8HHr   N)r4   r5   r6   __doc__r3   rx   r   r   BaseExceptionr   r   r   r7   r
   r	   r   r   staticmethodr&   r   r!   r$   r"   rK   rK   Q   s   K4l
*
04./
0 -(
0 '	
0
 

0 $SM $	s5c?#SX-	. $D

 sm
 	
 
 

* 999 sm9 	9 9 
9 9r$   rK   c            
       z    e Zd ZdZddZddZdeee      dee   dee	   ddfd	Z
dd
Zdddee   dededdf
dZy)NoOpBuildEnvironmentz0A no-op drop-in replacement for BuildEnvironmentr   Nc                      y r    r!   r1   s    r"   r3   zNoOpBuildEnvironment.__init__"      r$   c                      y r    r!   r   s    r"   rx   zNoOpBuildEnvironment.__enter__%  r   r$   ry   rz   r{   c                      y r    r!   )r1   ry   rz   r{   s       r"   r   zNoOpBuildEnvironment.__exit__(  s     	r$   c                      y r    r!   r   s    r"   cleanupzNoOpBuildEnvironment.cleanup0  r   r$   r   r   r   r   rM   c                    t               r    )NotImplementedError)r1   r   r   r   rM   s        r"   r   z)NoOpBuildEnvironment.install_requirements3  s     "##r$   r   )r4   r5   r6   r   r3   rx   r   r   r   r   r   r   r   r7   r   r!   r$   r"   r   r     s    :4./ -( '	
 
$$ sm$ 	$ $ 
$r$   r   )9r   r   r?   r9   rF   r   rg   collectionsr   typesr   typingr   r   r   r   r	   r
   r   r   pip._vendor.certifir   pip._vendor.packaging.versionr   pipr   r;   pip._internal.cli.spinnersr   pip._internal.locationsr   r   r   pip._internal.metadatar   r   pip._internal.utils.loggingr   pip._internal.utils.packagingr   pip._internal.utils.subprocessr   pip._internal.utils.temp_dirr   r   "pip._internal.index.package_finderr   	getLoggerr4   r   r7   r#   r&   rB   rI   rK   r   r!   r$   r"   <module>r      s     	   
  #  S S S % 1 ( 3 H H K / 9 : E@			8	$&c &c &eE#Jc3h$?@ &? ?5# 5 =#c( =(K K\$+ $r$   