
    k"g<                     r   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	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jL                  dk\  Z'de(fdZ) e)       Z*e*sddlm+Z+ e're*sejX                  Z-nej\                  Z-de(fdZ/dee$e$f   de(fdZ0 e jb                  d      de(fd       Z2 e jb                  d      de(fd       Z3 e jb                  d      de(fd       Z4 e jb                  d      de(fd       Z5 e jb                  d      de(fd       Z6dee$   de	e$ddf   fdZ7 e jb                  d      dejp                  dejp                  de$ddfd        Z9dejp                  dejp                  de$de(fd!Z: e jb                  d      d"dddd#d$e(d%e
e$   d&e
e$   d'e
e$   ddf
d(       Z;	 	 	 	 	 d2d)e$d$e(d%e
e$   d&e
e$   d*e(d'e
e$   defd+Z<de$fd,Z=de$fd-Z>d.e$de(fd/Z?de$fd0Z@de$fd1ZAy)3    N)AnyDict	GeneratorOptionalTuple)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     Y/var/www/html/djangosite/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_44860r4   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 )
Nr0   z/$platlibdir///lib64/Fz/lib/z
$platbase/z$base/purelib)replacer   )r5   r0   	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)r1   r.   allr-   s   @r(   _looks_like_red_hat_librG   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)r1   r.   r-   s    r(   _looks_like_debian_schemerK   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)r1   rM   distutils.distrN   finalize_optionsexec_prefixospathnormpathsysprefix)rM   rN   cmds      r(   _looks_like_red_hat_schemerX   {   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)r5   expandr8   r9   )r   r$   	get_pathsr2   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)r[   c              3   X   K   | ]"  }d |vxr d|v xr |j                  d        $ yw)Libr   zsite-packagesN)endswith)rA   ps     r(   rC   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   s9       	QI5A:Iajj.I*IIs   (*c              3   (   K   | ]	  }|     y wr@   r&   )rA   keyr^   s     r(   rC   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   s     ?%*?s   r0   r9   )r$   r\   rF   r]   s   @r(   _looks_like_msys2_mingw_schemeri      s7     U3E ?(>?  r'   partsc              #      K   t        j                  d      }t        t        dd       }|r|r|j	                  |      s| E d {    y | D ](  }|j	                  |      r|d dt        |      z
   }| * y 7 3w)N	LDVERSIONabiflagsr   )r$   get_config_varr#   rU   rd   len)rj   	ldversionrm   parts       r(   _fix_abiflagsrr      s     ((5IsJ-H HI,>,>x,H  ==#-1s8},.D
	 	s   AA9A74A9oldnewrg   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)rs   rt   rg   	issue_urlmessages        r(   _warn_mismatchedr{      s)    :I	 
 JJicBr'   c                ,    | |k(  ryt        | ||       y)NFrg   T)r{   )rs   rt   rg   s      r(   _warn_if_mismatchr~      s    
czS#3'r'   FuserhomerootrV   r   r   r   rV   c                 f    g d}t         j                  t        dj                  |      | |||       y )N)zAdditional context:z	user = %rz	home = %rz	root = %rzprefix = %r
)rv   rw   rx   join)r   r   r   rV   rj   s        r(   _log_contextr      s*    E JJ		% 0$dFKr'   	dist_nameisolatedc           	      f   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r3 t         xr* t        j                   dk\  xr t"        dk7  xr
 t%               }|r|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
 t1               }|rEt        j                   dk  xr: t         xr1 |dv xr+ t3        t5        |	j*                              |
j*                  k(  }|rt        xr |dv xr
 t7               }|rt9        j:                  d      xr t         xr |dv }|r|j=                  |	|
d| f        |sS t        j>                  | |||||d      tA        fdt        D              rtC        dd d        S |D ]  \  }	}
}tE        |	|
|        tG        ||||       S )N)r   r   r   r   rV   pypyrh   pythonheadersr0   )r   	   r   r   r   )usrlocalr      r   )r      )r   r0   r9   T)
check_home)r   includeplatincludezscheme.)ignore_config_filesc              3   B   K   | ]  }|   t        |      k7    y wr@   )r#   )rA   rB   default_oldrs   s     r(   rC   zget_scheme.<locals>.<genexpr>  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_inr}   r   )$r   r   _USE_SYSCONFIGr+   r   pathlibPathr#   rU   implementationnameparent
startswithr   rG   r
   version_infor   r4   r_   r   rj   ro   rX   rK   tuplerr   ri   r$   is_python_buildappenddistutils_schemeanyr   r{   r   )r   r   r   r   r   rV   rt   warning_contextsrB   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_sysconfig_abiflag_bugskip_msys2_mingw_bugskip_cpython_buildrg   r   rs   s                       @@r(   r   r      sE    

C 

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

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

%%f- 	 "  7 "7Y7 ##u||37 !!,,X6 	- 0 	>57  (Y((   F*( 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 	' *
 v% AA66A mEKK01U[[@	 	# &
 X33X8V8X 	   %%6 ;;:: 	
 } =>_o?b 

 -- 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_prefixr}   )r   r   r   r+   r~   r   r   r   rt   rs   s     r(   r   r     sN    

#
#
%C


#
#
%Cc*GLL,=<PJr'   c                  D    t        j                  dd      j                  S )N T)r   )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)rK   )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.r9   r}   )	r   r   r   r+   r   r~   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*   r0   r}   )
r   r   r   r   r+   r   r~   r   r   r   )rt   r+   rs   s      r(   r   r     s`    

 
 
"C

 *
 
 
"C+C0
c*GLL,=9MJr'   )FNNFN)B	functoolsloggingrR   r   rU   r$   typingr   r   r   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__rv   r#   r   str__annotations__r   r%   r"   r)   r   r+   WARNINGrx   DEBUGr4   r<   	lru_cacherG   rK   rX   r_   ri   rr   r   r{   r~   r   r   r   r   r   r   r   r&   r'   r(   <module>r      s`     	  
  8 8 ; . 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"  #"s 	#tT/(B   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(  oo
o 3-o 3-	o
 o SMo od 8c 8  "S S r'   