
    i6                       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	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j6                  e      Z eedd      Zde d<   d#dZ! e!       Z"e"sddlm#Z# e"rejH                  Z%nejL                  Z%d#dZ'd$dZ(ejR                  d#d       Z*ejR                  d#d       Z+ejR                  d#d       Z,ejR                  d#d       Z-ejR                  d#d       Z.ejR                  d%d       Z/d&dZ0ejR                  ddddd	 	 	 	 	 	 	 	 	 d'd       Z1	 	 	 	 	 d(	 	 	 	 	 	 	 	 	 	 	 	 	 d)dZ2d*dZ3d*dZ4d+d Z5d*d!Z6d*d"Z7y),    )annotationsN)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_PLATLIBDIRc                 6    t        t        t        dd            S )ah  This function determines the value of _USE_SYSCONFIG.

    By default, pip uses sysconfig.
    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_SYSCONFIGT)boolgetattr	sysconfig     S/root/searxng-venv/lib/python3.12/site-packages/pip/_internal/locations/__init__.py_should_use_sysconfigr"   -   s     	#7>??r    
_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_44860r-   K   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_purelibr5   Y   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)r5   ).0kr'   s     r!   	<genexpr>z*_looks_like_red_hat_lib.<locals>.<genexpr>k   s9        	
_ 	L78JK	Ls   !)unix_prefix	unix_home)r*   r'   allr&   s   @r!   _looks_like_red_hat_libr?   c   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_schemerC   r   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*   rE   distutils.distrF   finalize_optionsexec_prefixospathnormpathsysprefix)rE   rF   cmds      r!   _looks_like_red_hat_schemerP   z   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   expandr0   r1   )r   r   	get_pathsr+   pathss    r!   _looks_like_slackware_schemerW      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)rS   c              3  X   K   | ]"  }d |vxr d|v xr |j                  d        $ yw)Libr   zsite-packagesN)endswith)r9   ps     r!   r;   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   s9       	QI5A:Iajj.I*IIs   (*c              3  (   K   | ]	  }|     y wr8   r   )r9   keyrV   s     r!   r;   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   s     ?%*?s   r)   r1   )r   rT   r>   rU   s   @r!   _looks_like_msys2_mingw_schemera      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newr_   	issue_urlmessages        r!   _warn_mismatchedrj      s)    :I	 
 JJicBr    c               ,    | |k(  ryt        | ||       y)NFr_   T)rj   )rf   rg   r_   s      r!   _warn_if_mismatchrm      s    
czS#3'r    FuserhomerootrN   c                f    g d}t         j                  t        dj                  |      | |||       y )N)zAdditional context:z	user = %rz	home = %rz	root = %rzprefix = %r
)rc   rd   re   join)ro   rp   rq   rN   partss        r!   _log_contextrv      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)ro   rp   rq   isolatedrN   pypyr`   pythonheadersr)   r   r	      )usrlocalr}      r~   T)
check_home)r{   includeplatincludezscheme.)ignore_config_filesc              3  B   K   | ]  }|   t        |      k7    y wr8   )r   )r9   r:   default_oldrf   s     r!   r;   zget_scheme.<locals>.<genexpr>f  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_inrl   rn   )!r
   r   _USE_SYSCONFIGr$   r   pathlibPathr   rM   implementationnameparent
startswithr   r?   r   r   r-   rW   r   ru   lenrP   rC   ra   r   is_python_buildappenddistutils_schemeanyr   rj   rv   )	dist_namero   rp   rq   rx   rN   rg   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_buildr_   r   rf   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_prefixrl   )r
   r   r   r$   rm   r   r   rv   rg   rf   s     r!   r   r   {  sN    

#
#
%C


#
#
%Cc*GLL,=<PJr    c                 D    t        j                  dd      j                  S )N T)ro   )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)rC   )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.r1   rl   )	r
   r   r   r$   r   rm   r   r   rv   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)   rl   )
r
   r   r   r   r$   r   rm   r   r   rv   )rg   r$   rf   s      r!   r   r     s`    

 
 
"C

 *
 
 
"C+C0
c*GLL,=9MJr    )returnr   )r3   zdict[str, str]r   r   )rf   pathlib.Pathrg   r   r_   r   r   None)rf   r   rg   r   r_   r   r   r   )
ro   r   rp   
str | Nonerq   r   rN   r   r   r   )FNNFN)r   r   ro   r   rp   r   rq   r   rx   r   rN   r   r   r   )r   r   )r   r   r   r   )8
__future__r   	functoolsloggingrJ   r   rM   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__rc   r   r   __annotations__r"   r   r$   DEBUGre   WARNINGr-   r5   cacher?   rC   rP   rW   ra   rj   rm   rv   r   r   r   r   r   r   r   r    r!   <module>r      s   "   	  
  ; . 6 C   
		8	$ 3e4S 4@ '(  mmOooO,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    