o
    ?Je<                     @   s  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e Z!e"eddZ#e$e%d< ej&dkZ'de(fddZ)e) Z*e*sddlm+Z+ e're*sej,Z-nej.Z-de(fddZ/dee$e$f de(fddZ0e j1ddde(fddZ2e j1ddde(fddZ3e j1ddde(fddZ4e j1ddde(fdd Z5e j1ddde(fd!d"Z6d#ee$ de	e$ddf fd$d%Z7e j1ddd&ej8d'ej8d(e$ddfd)d*Z9d&ej8d'ej8d(e$de(fd+d,Z:e j1ddd-dddd.d/e(d0e
e$ d1e
e$ d2e
e$ ddf
d3d4Z;	-			-	dDd5e$d/e(d0e
e$ d1e
e$ d6e(d2e
e$ defd7d8Z<de$fd9d:Z=de$fd;d<Z>d=e$de(fd>d?Z?de$fd@dAZ@de$fdBdCZAdS )E    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                   C   s   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.
    Z_PIP_USE_SYSCONFIG)boolgetattr	sysconfig_USE_SYSCONFIG_DEFAULT r#   r#   n/home/seandotau/au.memorygallery.club/gallery/lib/python3.10/site-packages/pip/_internal/locations/__init__.py_should_use_sysconfig.   s   r%   
_distutilsc                  C   s8   ddl m}  z| d d }W |dkS  ty   Y dS w )zsThe resolution to bpo-44860 will change this incorrect platlib.

    See <https://bugs.python.org/issue44860>.
    r   INSTALL_SCHEMESZ	unix_userplatlibFz	$usersite)distutils.command.installr)   KeyError)r)   Zunix_user_platlibr#   r#   r$   _looks_like_bpo_44860L   s   r-   schemec                 C   sP   | d }d|v r| ddt d}d|vrdS | dd}| dd| d	 kS )
Nr*   z/$platlibdir///lib64/Fz/lib/z
$platbase/z$base/purelib)replacer   )r.   r*   Z	unpatchedr#   r#   r$   +_looks_like_red_hat_patched_platlib_purelibZ   s   r3   )maxsizec                      s"   ddl m  t fd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   s$    | ]}| v ot  | V  qd S N)r3   .0kr(   r#   r$   	<genexpr>l   s    

z*_looks_like_red_hat_lib.<locals>.<genexpr>)Zunix_prefixZ	unix_home)r+   r)   allr#   r#   r(   r$   _looks_like_red_hat_libd   s   r;   c                  C   s   ddl m}  d| v od| v S )z#Debian adds two additional schemes.r   r(   Z
deb_systemZ
unix_local)r+   r)   r(   r#   r#   r$   _looks_like_debian_schemes   s   r<   c                  C   s^   ddl m}  ddlm} | | }|  |jtjt	j dko.|j
t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+   r=   Zdistutils.distr>   Zfinalize_optionsexec_prefixospathnormpathsysprefix)r=   r>   cmdr#   r#   r$   _looks_like_red_hat_scheme{   s   	
rF   c                  C   sH   t du rdS z	tjddd} W n
 ty   Y dS w d| d v o#dt vS )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.
    NF
posix_user)r.   expandr0   r1   )r   r!   	get_pathsr,   pathsr#   r#   r$   _looks_like_slackware_scheme   s   rL   c                      s.   t jddd tdd  fd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)rH   c                 s   s,    | ]}d |vod|v o| d V  qdS )ZLibr   zsite-packagesN)endswith)r7   pr#   r#   r$   r9      s
    
z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>c                 3   s    | ]} | V  qd S r5   r#   )r7   keyrJ   r#   r$   r9      s    r*   r1   )r!   rI   r:   r#   r#   rJ   r$   _looks_like_msys2_mingw_scheme   s   rR   partsc                 c   sj    t d}ttdd }|r|r||s| E d H  d S | D ]}||r/|d dt|  }|V  qd S )NZ	LDVERSIONabiflagsr   )r!   get_config_varr    rC   rN   len)rS   Z	ldversionrT   partr#   r#   r$   _fix_abiflags   s   


rX   oldnewrP   c                C   s    d}d}t t|||| | d S )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)rY   rZ   rP   Z	issue_urlmessager#   r#   r$   _warn_mismatched   s   r_   c                C   s   | |krdS t | ||d dS )NFrP   T)r_   )rY   rZ   rP   r#   r#   r$   _warn_if_mismatch   s   ra   FuserhomerootrD   rc   rd   re   rD   c                 C   s&   g d}t td|| ||| d S )N)zAdditional context:z	user = %rz	home = %rz	root = %rzprefix = %r
)r[   r\   r]   join)rc   rd   re   rD   rS   r#   r#   r$   _log_context   s   rh   	dist_nameisolatedc              	      s  t j| |||||d}tr|S tj| |||||dg }tD ]}tt|}	tt||}
|	|
kr5qtj	j
dkoT|d uoT|dv oT|	j|
jkoT|	j
doT|
j
d}|rXq|ont on|dkon|	jj|
jkon|	jj
d}|rrq|dkrzt rzq|o|dkot otjdkotdkot }|rq|o|dv ot ot }|rq|p|p|pt  o|	jd	d
 dkot|
jd	ko|
jd	 dkot|
jd
k p|
jd dkot pt }|rqtjdk ot o|dv ott|	j|
jk}|rqto|dv ot }|rqtjddot o|dv }|rq||	|
d| f q|s"S tj| |||||dd t  fddtD rDt!dd d d S |D ]\}	}
}t"|	|
|d qFt#||||d S )N)rc   rd   re   rj   rD   pypyrQ   pythonheadersr*   )r   	   r   r   r   )usrlocalro      rp   )r      )rm   r*   r1   T)
check_home)rm   includeplatincludezscheme.)Zignore_config_filesc                 3   s"    | ]} | t |kV  qd S r5   )r    r6   Zdefault_oldrY   r#   r$   r9     s     zget_scheme.<locals>.<genexpr>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`   rb   )$r   r   _USE_SYSCONFIGr'   r   pathlibPathr    rC   implementationnameparent
startswithr   r;   r	   version_infor   r-   rL   r   rS   rV   rF   r<   tuplerX   rR   r!   is_python_buildappendZdistutils_schemeanyr
   r_   rh   )ri   rc   rd   re   rj   rD   rZ   Zwarning_contextsr8   Zold_vZnew_vZskip_pypy_special_caseZ$skip_osx_framework_user_special_caseZskip_bpo_44860Zskip_slackware_user_schemeZskip_linux_system_special_caseZskip_sysconfig_abiflag_bugZskip_msys2_mingw_bugZskip_cpython_buildrP   r#   rv   r$   r      s   	




	
r   c                  C   s<   t  } tr| S t }tt|t| ddrt  |S )NZ
bin_prefixr`   )r   r   rz   r'   ra   r{   r|   rh   rZ   rY   r#   r#   r$   r     s   r   c                   C   s   t jdddjS )N T)rc   )r   r   scriptsr#   r#   r#   r$   r     s   r   valuec                 C   s   t  sdS | dkrdS dS )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)r<   )r   r#   r#   r$   $_looks_like_deb_system_dist_packages  s
   
r   c                  C   sH   t  } tr| S t }t|r|S tt|t| ddr"t  |S )z,Return the default pure-Python lib location.r1   r`   )	r   r   rz   r'   r   ra   r{   r|   rh   r   r#   r#   r$   r     s   r   c                  C   sT   t  } tr| S ddlm} | }t|r|S tt|t| ddr(t	  |S )z0Return the default platform-shared lib location.r   r&   r*   r`   )
r   r   rz   r   r'   r   ra   r{   r|   rh   )rZ   r'   rY   r#   r#   r$   r     s   r   )FNNFN)B	functoolsloggingr@   r{   rC   r!   typingr   r   r   r   r   Z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__r[   r    r   str__annotations__r   r"   r   r%   rz   r'   WARNINGr]   DEBUGr-   r3   	lru_cacher;   r<   rF   rL   rR   rX   r|   r_   ra   rh   r   r   r   r   r   r   r#   r#   r#   r$   <module>   s   
  	







 
 


 3