
    UXhi7                       U d dl m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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!de"d<   ejF                  dk\  Z$d%dZ% e%       Z&e&sddlm'Z' e$re&sejP                  Z)nejT                  Z)d%dZ+d&dZ,ejZ                  d%d       Z.ejZ                  d%d       Z/ejZ                  d%d       Z0ejZ                  d%d       Z1ejZ                  d%d       Z2ejZ                  d'd       Z3d(dZ4ejZ                  ddddd	 	 	 	 	 	 	 	 	 d)d       Z5	 	 	 	 	 d*	 	 	 	 	 	 	 	 	 	 	 	 	 d+dZ6d,d Z7d,d!Z8d-d"Z9d,d#Z:d,d$Z;y).    )annotationsN)Any)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str_PLATLIBDIR)   
   c                 >    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     T/var/www/html/myenv/lib/python3.12/site-packages/pip/_internal/locations/__init__.py_should_use_sysconfigr&   0   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_44860r1   N   s=    
 :+K8C ++  s    	!!c                    | 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   )schemer-   	unpatcheds      r%   +_looks_like_red_hat_patched_platlib_purelibr9   \   se    YG'!///Q{m13EF	73I\84y8IIIr$   c                 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)r9   ).0kr+   s     r%   	<genexpr>z*_looks_like_red_hat_lib.<locals>.<genexpr>n   s9        	
_ 	L78JK	Ls   !)unix_prefix	unix_home)r.   r+   allr*   s   @r%   _looks_like_red_hat_librC   f   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_schemerG   u   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.   rI   distutils.distrJ   finalize_optionsexec_prefixospathnormpathsysprefix)rI   rJ   cmds      r%   _looks_like_red_hat_schemerT   }   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)r7   expandr4   r5   )r   r!   	get_pathsr/   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)rW   c              3  X   K   | ]"  }d |vxr d|v xr |j                  d        $ yw)Libr   zsite-packagesN)endswith)r=   ps     r%   r?   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   s9       	QI5A:Iajj.I*IIs   (*c              3  (   K   | ]	  }|     y wr<   r#   )r=   keyrZ   s     r%   r?   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   s     ?%*?s   r-   r5   )r!   rX   rB   rY   s   @r%   _looks_like_msys2_mingw_schemere      s7     U3E ?(>?  r$   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)oldnewrc   	issue_urlmessages        r%   _warn_mismatchedrn      s)    :I	 
 JJicBr$   c               ,    | |k(  ryt        | ||       y)NFrc   T)rn   )rj   rk   rc   s      r%   _warn_if_mismatchrq      s    
czS#3'r$   FuserhomerootrR   c                f    g d}t         j                  t        dj                  |      | |||       y )N)zAdditional context:z	user = %rz	home = %rz	root = %rzprefix = %r
)rg   rh   ri   join)rs   rt   ru   rR   partss        r%   _log_contextrz      s*    E JJ		% 0$dFKr$   c           	        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)rs   rt   ru   isolatedrR   pypyrd   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_oldrj   s     r%   r?   zget_scheme.<locals>.<genexpr>i  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_inrp   rr   )!r   r   _USE_SYSCONFIGr(   r   pathlibPathr    rQ   implementationnameparent
startswithr   rC   r   r   r1   r[   r	   ry   lenrT   rG   re   r!   is_python_buildappenddistutils_schemeanyr   rn   rz   )	dist_namers   rt   ru   r|   rR   rk   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_buildrc   r   rj   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_prefixrp   )r   r   r   r(   rq   r   r   rz   rk   rj   s     r%   r   r   ~  sN    

#
#
%C


#
#
%Cc*GLL,=<PJr$   c                 D    t        j                  dd      j                  S )N T)rs   )r   r   scriptsr#   r$   r%   r   r     s      $/777r$   c                &    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)rG   )values    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.r5   rp   )	r   r   r   r(   r   rq   r   r   rz   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-   rp   )
r   r   r   r   r(   r   rq   r   r   rz   )rk   r(   rj   s      r%   r   r     s`    

 
 
"C

 *
 
 
"C+C0
c*GLL,=9MJr$   )returnr   )r7   zdict[str, str]r   r   )rj   pathlib.Pathrk   r   rc   r   r   None)rj   r   rk   r   rc   r   r   r   )
rs   r   rt   
str | Noneru   r   rR   r   r   r   )FNNFN)r   r   rs   r   rt   r   ru   r   r|   r   rR   r   r   r   )r   r   )r   r   r   r   )<
__future__r   	functoolsloggingrN   r   rQ   r!   typingr   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__rg   r    r   __annotations__version_infor"   r&   r   r(   WARNINGri   DEBUGr1   r9   cacherC   rG   rT   r[   re   rn   rq   rz   r   r   r   r   r   r   r#   r$   r%   <module>r      s%   "   	  
   ; . 6 C   
		8	$ 3e4S 4))W4 R '(  .ooOmmO,J   O O  & H H  " C C  L
L L 	L
 L 
L L( cc
c c 	c
 c c cL8"r$   