
    g(              
          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jZ                  e.      Z/de0de0deee0   ee0e0f   f   fdZ1 G d d      Z2de0fdZ3dee0   fdZ4 G d d      Z5 G d de5      Z6y)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                     | |k7  r| |fS | fS N )r   r   s     J/var/www/html/venv/lib/python3.12/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__strr2   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_dirr6   osfsdecode)sources    r!   get_runnable_piprA   ,   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siterC   r   r   r>   r&   normcase)system_sitesr&   s     r!   _get_system_sitepackagesrH   <   sP     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>V   s6      %
 7277<<t<=>%
s   ?A)normaloverlayrE   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)
                )rG   r/   )r   r   	BUILD_ENVr   	_prefixes	_bin_dirs	_lib_dirsreversedlistvaluesappendr,   extendr/   rH   r>   r&   rO   	_site_direxistsmkdiropenwritetextwrapdedentformat)r0   r)   rG   fprR   s       @r!   r2   zBuildEnvironment.__init__S   sE    m&=&=PTU$ %
-%
 

 %'$&tDNN$9$9$;<= 	3FNN!!&..1NN!!&//2	3 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
PYTHONPATHrk   1)r>   environget	_save_envrZ   r`   splitpathsepra   updaterO   )r0   rQ   r&   old_path
pythonpaths        r!   	__enter__zBuildEnvironment.__enter__   s     C
 "**..t,,

 ~~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   )rq   itemsr>   ro   pop)r0   rx   ry   rz   varname	old_values         r!   __exit__zBuildEnvironment.__exit__   sK     #'.."6"6"8 	0GY 

w-&/

7#		0r#   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)setrD   r   r[   r   r   markerevaluateget_distributionrQ   add
isinstanceversionr   	specifiercontains)	r0   r   missingconflictingenvreq_strreqdistinstalled_req_strs	            r!   check_requirementsz#BuildEnvironment.check_requirements   s    %e 4-  /,. 
   B!'* ::)#**2E2EwPRm2T++CHH5KK(dllG4+.88*Bt||n(E%+.88*C~(F%}}--dll-MOO%6$@AB" G##r#   finderr   requirementsprefix_as_stringrL   c                    | j                   |   }|j                  rJ d|_        |sy | j                  t               ||||       y )NT)rL   )rY   r*   _install_requirementsrA   )r0   r   r   r   rL   r)   s         r!   install_requirementsz%BuildEnvironment.install_requirements   sR      01<<"" 	# 	
r#   pip_runnabler)   c          
         t         j                  | dddd|j                  dg}t        j	                         t
        j                  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-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_   getattrformat_controlr`   replacerO   sorted
index_urls
find_linkstrusted_hostsallow_all_prereleasesprefer_binaryr   r   r   )r   r   r   r)   rL   argsr   formatsr   extra_indexlinkhostr   r   s                 r!   r   z&BuildEnvironment._install_requirements   s    NN KK'	
 ##%6KK: 	Nf33^DGKK>11#s;;HHVG$9z:;	 &&
KKz!}-.)!"~ @0+>?@ KK%%% 	0DKK./	0 (( 	2DKK)401	2''KK KK)*DL!/9Kv./ 	79$@+		 	 	s   
G&&G/r   N)r3   r4   r5   __doc__r2   rw   r   r   BaseExceptionr   r   r   r6   r
   r	   r   r   staticmethodr%   r   r    r#   r!   rJ   rJ   P   s   K4l
*
04./
0 -(
0 '	
0
 

0 $SM $	s5c?#SX-	. $D

 sm
 	
 
 

* 666 sm6 	6 6 
6 6r#   rJ   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    r0   s    r!   r2   zNoOpBuildEnvironment.__init__      r#   c                      y r   r    r   s    r!   rw   zNoOpBuildEnvironment.__enter__!  r   r#   rx   ry   rz   c                      y r   r    )r0   rx   ry   rz   s       r!   r   zNoOpBuildEnvironment.__exit__$  s     	r#   c                      y r   r    r   s    r!   cleanupzNoOpBuildEnvironment.cleanup,  r   r#   r   r   r   r   rL   c                    t               r   )NotImplementedError)r0   r   r   r   rL   s        r!   r   z)NoOpBuildEnvironment.install_requirements/  s     "##r#   r   )r3   r4   r5   r   r2   rw   r   r   r   r   r   r   r   r6   r   r    r#   r!   r   r     s    :4./ -( '	
 
$$ sm$ 	$ $ 
$r#   r   )7r   r   r>   r8   rE   r   rf   collectionsr   typesr   typingr   r   r   r   r	   r
   r   r   pip._vendor.certifir   "pip._vendor.packaging.requirementsr   pip._vendor.packaging.versionr   pipr   r:   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   	getLoggerr3   r   r6   r"   r%   rA   rH   rJ   r   r    r#   r!   <module>r      s     	   
  #  S S S % : 1 ( 3 H H K : E@			8	$&c &c &eE#Jc3h$?@ &? ?5# 5 =#c( =(H HV$+ $r#   