
    )h7                     H   U 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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 dd	lmZmZmZmZmZmZ g d
Z ej:                  e      Z e edd      Z!e"e#d<   ejH                  dk\  Z%de&fdZ' e'       Z(e(sddlm)Z) e%re(sejT                  Z+nejX                  Z+de&fdZ-dee"e"f   de&fdZ. e j^                  d      de&fd       Z0 e j^                  d      de&fd       Z1 e j^                  d      de&fd       Z2 e j^                  d      de&fd       Z3 e j^                  d      de&fd       Z4 e j^                  d      dejj                  dejj                  de"ddfd       Z6dejj                  dejj                  de"de&fdZ7 e j^                  d      d dddd!d"e&d#e	e"   d$e	e"   d%e	e"   ddf
d&       Z8	 	 	 	 	 d0d'e"d"e&d#e	e"   d$e	e"   d(e&d%e	e"   defd)Z9de"fd*Z:de"fd+Z;d,e"de&fd-Z<de"fd.Z=de"fd/Z>y)1    N)AnyDictOptional)SCHEME_KEYSScheme)WINDOWS)
deprecated)running_under_virtualenv   )
_sysconfig)USER_CACHE_DIRget_major_minor_versionget_src_prefixis_osx_frameworksite_packages	user_site)
r   get_bin_prefixget_bin_userr   get_platlibget_purelib
get_schemer   r   r   
platlibdirlib_PLATLIBDIR)   
   returnc                  >    t        t        t        dt                    S )ax  This function determines the value of _USE_SYSCONFIG.

    By default, pip uses sysconfig on Python 3.10+.
    But Python distributors can override this decision by setting:
        sysconfig._PIP_USE_SYSCONFIG = True / False
    Rationale in https://github.com/pypa/pip/issues/10647

    This is a function for testability, but should be constant during any one
    run.
    _PIP_USE_SYSCONFIG)boolgetattr	sysconfig_USE_SYSCONFIG_DEFAULT     S/var/www/html/venv/lib/python3.12/site-packages/pip/_internal/locations/__init__.py_should_use_sysconfigr'   .   s     	#79OPQQr%   
_distutilsc                  H    ddl m}  	 | d   d   }|dk(  S # t        $ r Y yw xY w)zsThe resolution to bpo-44860 will change this incorrect platlib.

    See <https://bugs.python.org/issue44860>.
    r   INSTALL_SCHEMES	unix_userplatlibFz	$usersite)distutils.command.installr,   KeyError)r,   unix_user_platlibs     r&   _looks_like_bpo_44860r2   L   s=    
 :+K8C ++  s    	!!schemec                     | d   }d|v r|j                  ddt         d      }d|vry|j                  dd      }|j                  dd      | d	   k(  S )
Nr.   z/$platlibdir///lib64/Fz/lib/z
$platbase/z$base/purelib)replacer   )r3   r.   	unpatcheds      r&   +_looks_like_red_hat_patched_platlib_purelibr:   Z   se    YG'!///Q{m13EF	73I\84y8IIIr%   )maxsizec                  8     ddl m  t         fddD              S )zRed Hat patches platlib in unix_prefix and unix_home, but not purelib.

    This is the only way I can see to tell a Red Hat-patched Python.
    r   r+   c              3   F   K   | ]  }|v xr t        |           y wN)r:   ).0kr,   s     r&   	<genexpr>z*_looks_like_red_hat_lib.<locals>.<genexpr>l   s9        	
_ 	L78JK	Ls   !)unix_prefix	unix_home)r/   r,   allr+   s   @r&   _looks_like_red_hat_librE   d   s$     :  .  r%   c                  "    ddl m}  d| v xr d| v S )z#Debian adds two additional schemes.r   r+   
deb_system
unix_local)r/   r,   r+   s    r&   _looks_like_debian_schemerI   s   s     :?*N|/NNr%   c                  L   ddl m}  ddlm}  |  |             }|j	                          |j
                  t        j                  j                  t        j
                         dk(  xr= |j                  t        j                  j                  t        j                         dk(  S )a\  Red Hat patches ``sys.prefix`` and ``sys.exec_prefix``.

    Red Hat's ``00251-change-user-install-location.patch`` changes the install
    command's ``prefix`` and ``exec_prefix`` to append ``"/local"``. This is
    (fortunately?) done quite unconditionally, so we create a default command
    object without any configuration to detect this.
    r   )install)Distributionz/local)r/   rK   distutils.distrL   finalize_optionsexec_prefixospathnormpathsysprefix)rK   rL   cmds      r&   _looks_like_red_hat_schemerV   {   s{     2+|~&Cbgg..s?@GG 	BJJRWW--cjj9:&AAr%   c                      t         y	 t        j                  dd      } d| d   v xr dt         vS # t        $ r Y yw xY w)zSlackware patches sysconfig but fails to patch distutils and site.

    Slackware changes sysconfig's user scheme to use ``"lib64"`` for the lib
    path, but does not do the same to the site module.
    F
posix_user)r3   expandr6   r7   )r   r"   	get_pathsr0   pathss    r&   _looks_like_slackware_schemer]      sT     ##<F i((GYi-GG  s   1 	==c                  h     t        j                  dd       t        d  fddD        D              S )a  MSYS2 patches distutils and sysconfig to use a UNIX-like scheme.

    However, MSYS2 incorrectly patches sysconfig ``nt`` scheme. The fix is
    likely going to be included in their 3.10 release, so we ignore the warning.
    See msys2/MINGW-packages#9319.

    MSYS2 MINGW's patch uses lowercase ``"lib"`` instead of the usual uppercase,
    and is missing the final ``"site-packages"``.
    ntF)rY   c              3   X   K   | ]"  }d |vxr d|v xr |j                  d        $ yw)Libr   zsite-packagesN)endswith)r?   ps     r&   rA   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   s9       	QI5A:Iajj.I*IIs   (*c              3   (   K   | ]	  }|     y wr>   r$   )r?   keyr\   s     r&   rA   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   s     ?%*?s   r.   r7   )r"   rZ   rD   r[   s   @r&   _looks_like_msys2_mingw_schemerg      s7     U3E ?(>?  r%   oldnewre   c                H    d}d}t         j                  t        |||| |       y )Nz(https://github.com/pypa/pip/issues/10151zSValue for %s does not match. Please report this to <%s>
distutils: %s
sysconfig: %s)loggerlog_MISMATCH_LEVEL)rh   ri   re   	issue_urlmessages        r&   _warn_mismatchedrp      s)    :I	 
 JJicBr%   c                ,    | |k(  ryt        | ||       y)NFre   T)rp   )rh   ri   re   s      r&   _warn_if_mismatchrs      s    
czS#3'r%   FuserhomerootrT   ru   rv   rw   rT   c                 f    g d}t         j                  t        dj                  |      | |||       y )N)zAdditional context:z	user = %rz	home = %rz	root = %rzprefix = %r
)rk   rl   rm   join)ru   rv   rw   rT   partss        r&   _log_contextr|      s*    E JJ		% 0$dFKr%   	dist_nameisolatedc           	         t        j                  | |||||      }t        r|S t        j                  | |||||      g }t        D ]  }t        j                  t        |            }	t        j                  t        ||            }
|	|
k(  rHt        j                  j                  dk(  xr_ |d uxrY |dv xrS |	j                  |
j                  k(  xr8 |	j                  j                  d      xr |
j                  j                  d      }|r|xr] t               xrQ |dk(  xrJ |	j                  j                  |
j                  k(  xr% |	j                  j                  j                  d      }|r.|dk(  rt               r?|xr% |dk(  xr t         xr t         dk7  xr
 t#               }|rl|xr |dv xr t         xr
 t%               }|r|xs |xs |xs
 t'                xr |	j(                  dd	 d
k(  xrr t+        |
j(                        dkD  xrX |
j(                  d   dk(  xrD t+        |
j(                        d	k  xs |
j(                  d   dk7  xr t-               xs
 t/               }|r0t        xr |dv xr
 t1               }|rLt3        j4                  d      xr t         xr |dv }|ru|j7                  |	|
d| f        |sS t        j8                  | |||||d      t;        fdt        D              rt=        dd d        S |D ]  \  }	}
}t?        |	|
|        tA        ||||       S )N)ru   rv   rw   r~   rT   pypyrf   pythonheadersr.   r   r   r   )usrlocalr      r   T)
check_home)r   includeplatincludezscheme.)ignore_config_filesc              3   B   K   | ]  }|   t        |      k7    y wr>   )r!   )r?   r@   default_oldrh   s     r&   rA   zget_scheme.<locals>.<genexpr>g  s      
B;q>WS!_,
Bs   zConfiguring installation scheme with distutils config files is deprecated and will no longer work in the near future. If you are using a Homebrew or Linuxbrew Python, please see discussion at https://github.com/Homebrew/homebrew-core/issues/76621)reasonreplacementgone_inrr   rt   )!r   r   _USE_SYSCONFIGr)   r   pathlibPathr!   rS   implementationnameparent
startswithr   rE   r   r   r2   r]   r
   r{   lenrV   rI   rg   r"   is_python_buildappenddistutils_schemeanyr	   rp   r|   )r}   ru   rv   rw   r~   rT   ri   warning_contextsr@   old_vnew_vskip_pypy_special_case$skip_osx_framework_user_special_caseskip_bpo_44860skip_slackware_user_schemeskip_linux_system_special_caseskip_msys2_mingw_bugskip_cpython_buildre   r   rh   s                      @@r&   r   r      s    

C 



C  c?WS!_-WS!_-E> ##v- .D .++. ,. 

%%h/	.
 

%%f- 	 "  7 "7Y7 ##u||37 !!,,X6 	- 0 	>57  (Y(( u$( &' 	 
  /++// -.	 	# & EEE+C+EF NAa $44NEKK 1$N A%'N U[[!A%BQ7)B	N
 ,-L1J1L 	' *
 X33X8V8X 	   %%6 ;;:: 	
 } =>Gc?J 

 -- K 
Bk
BBL
 		
 
 . 0uc3/0dD@Jr%   c                      t        j                         } t        r| S t        j                         }t	        t        j                  |      t        j                  |       d      r
t                |S )N
bin_prefixrr   )r   r   r   r)   rs   r   r   r|   ri   rh   s     r&   r   r   |  sN    

#
#
%C


#
#
%Cc*GLL,=<PJr%   c                  D    t        j                  dd      j                  S )N T)ru   )r   r   scriptsr$   r%   r&   r   r     s      $/777r%   valuec                 &    t               sy| dk(  ryy)a  Check if the value is Debian's APT-controlled dist-packages.

    Debian's ``distutils.sysconfig.get_python_lib()`` implementation returns the
    default package path controlled by APT, but does not patch ``sysconfig`` to
    do the same. This is similar to the bug worked around in ``get_scheme()``,
    but here the default is ``deb_system`` instead of ``unix_local``. Ultimately
    we can't do anything about this Debian bug, and this detection allows us to
    skip the warning when needed.
    Fz/usr/lib/python3/dist-packagesT)rI   )r   s    r&   $_looks_like_deb_system_dist_packagesr     s     %&00r%   c                      t        j                         } t        r| S t        j                         }t	        |      r|S t        t        j                  |      t        j                  |       d      r
t                |S )z,Return the default pure-Python lib location.r7   rr   )	r   r   r   r)   r   rs   r   r   r|   r   s     r&   r   r     s[    

 
 
"C


 
 
"C+C0
c*GLL,=9MJr%   c                     t        j                         } t        r| S ddlm}  |j                         }t        |      r|S t        t        j                  |      t        j                  |       d      r
t                |S )z0Return the default platform-shared lib location.r   r(   r.   rr   )
r   r   r   r   r)   r   rs   r   r   r|   )ri   r)   rh   s      r&   r   r     s`    

 
 
"C

 *
 
 
"C+C0
c*GLL,=9MJr%   )FNNFN)?	functoolsloggingrP   r   rS   r"   typingr   r   r   pip._internal.models.schemer   r   pip._internal.utils.compatr   pip._internal.utils.deprecationr	   pip._internal.utils.virtualenvr
   r   r   baser   r   r   r   r   r   __all__	getLogger__name__rk   r!   r   str__annotations__version_infor#   r    r'   r   r)   WARNINGrm   DEBUGr2   r:   	lru_cacherE   rI   rV   r]   rg   r   rp   rs   r|   r   r   r   r   r   r   r$   r%   r&   <module>r      s>     	  
  & & ; . 6 C   
		8	$ 3e4S 4))W4 Rt R '(  .ooOmmO,t ,JS#X J4 J T"  # T"O4 O #O T"D  #& T"Hd H #H T"  #" T"C',, CW\\ C3 C4 C #C7<< gll C D  T"  L
L 3-L 3-	L
 SML 
L #L(  cc
c 3-c 3-	c
 c SMc cL 8c 8  "S S r%   