
    Kii7                       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j#        dk    Z$d7dZ% e%            Z&e&sddlm'Z' e$r
e&sej(        Z)nej*        Z)d7dZ+d8dZ,ej-        d7d            Z.ej-        d7d            Z/ej-        d7d            Z0ej-        d7d            Z1ej-        d7d            Z2ej-        d9d#            Z3d:d$Z4ej-        d%dddd&d;d,            Z5	 	 	 	 	 d<d=d0Z6d>d1Z7d>d2Z8d?d4Z9d>d5Z:d>d6Z;dS )@    )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)   
   returnboolc                 R    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)r   getattr	sysconfig_USE_SYSCONFIG_DEFAULT     X/srv/django_bis/venv311/lib/python3.11/site-packages/pip/_internal/locations/__init__.py_should_use_sysconfigr'   0   s      	#79OPPQQQr%   
_distutilsc                 \    ddl m}  	 | d         d         }n# t          $ r Y dS w xY w|dk    S )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   N   s[    
 :99999+K8C   uu++s    
%%schemedict[str, str]c                    | 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   )r3   r.   	unpatcheds      r&   +_looks_like_red_hat_patched_platlib_purelibr;   \   sy    YG'!!///3E{3E3E3EFFu	733I\844y8IIIr%   c                 F     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  J   K   | ]}|v ot          |                   V  d S N)r;   ).0kr,   s     r&   	<genexpr>z*_looks_like_red_hat_lib.<locals>.<genexpr>n   sT          	
_ 	L78JKK     r%   )unix_prefix	unix_home)r/   r,   allr+   s   @r&   _looks_like_red_hat_librE   f   sQ     :99999     .     r%   c                     ddl m}  d| v od| v S )z#Debian adds two additional schemes.r   r+   
deb_system
unix_local)r/   r,   r+   s    r&   _looks_like_debian_schemerI   u   s+     :99999?*N|/NNr%   c                 <   ddl m}  ddlm}  |  |                      }|                                 |j        t          j                            t          j                   dk    o4|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/   rK   distutils.distrL   finalize_optionsexec_prefixospathnormpathsysprefix)rK   rL   cmds      r&   _looks_like_red_hat_schemerV   }   s     211111++++++w||~~&&Cbg..s??GGGG 	BJRW--cj99AAAAr%   c                     t           dS 	 t          j        dd          } n# t          $ r Y dS w xY 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)r3   expandr7   r8   )r   r"   	get_pathsr0   pathss    r&   _looks_like_slackware_schemer]      sg     u#<FFF   uui((GYi-GGs   " 
00c                 z     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  R   K   | ]"}d |vod|v o|                     d           V  #dS )Libr   zsite-packagesN)endswith)r?   ps     r&   rA   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   sW         	QI5A:Iajj.I.I*I     r%   c              3  (   K   | ]}|         V  d S r>   r$   )r?   keyr\   s     r&   rA   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   s'      ??%*??????r%   r.   r8   )r"   rZ   rD   r[   s   @r&   _looks_like_msys2_mingw_schemerg      s]     U333E  ????(>???     r%   oldpathlib.Pathnewre   Nonec               V    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)rh   rj   re   	issue_urlmessages        r&   _warn_mismatchedrr      s5    :I	 
 JJicBBBBBr%   c               :    | |k    rdS t          | ||           dS )NFre   T)rr   )rh   rj   re   s      r&   _warn_if_mismatchru      s*    
czzuS#3''''4r%   FuserhomerootrT   rw   rx   
str | Nonery   rT   c                |    g d}t                               t          d                    |          | |||           d S )N)zAdditional context:z	user = %rz	home = %rz	root = %rzprefix = %r
)rm   rn   ro   join)rw   rx   ry   rT   partss        r&   _log_contextr      sC      E JJ		% 0 0$dFKKKKKr%   	dist_nameisolatedr   c           	     P   t          j        | |||||          }t          r|S t          j        | |||||          g }t          D ]Y}t          j        t          |                    }	t          j        t          ||                    }
|	|
k    rNt          j	        j
        dk    oK|d uoG|dv oC|	j        |
j        k    o3|	j
                            d          o|
j
                            d          }|r|oGt                      o9|dk    o3|	j        j        |
j        k    o|	j        j
                            d          }|r|dk    rt                      r|o&|dk    o t           ot           dk    ot#                      }|rB|o|dv ot           ot%                      }|rb|p|p|pt'                       o|	j        dd	         d
k    omt+          |
j                  dk    oU|
j        d         dk    oDt+          |
j                  d	k     p|
j        d         dk    ot-                      pt/                      }|rt          o|dv ot1                      }|rt3          j        d          ot           o|dv }|r>|                    |	|
d| f           [|sS t          j        | |||||d          t;          fdt          D                       rt=          dd d            S |D ]\  }	}
}t?          |	|
|           tA          ||||           S )N)rw   rx   ry   r   rT   pypyrf   pythonheadersr.   r   r
   r   )usrlocalr      r   T)
check_home)r   includeplatincludezscheme.)ignore_config_filesc              3  L   K   | ]}|         t          |          k    V  d S r>   )r!   )r?   r@   default_oldrh   s     r&   rA   zget_scheme.<locals>.<genexpr>i  s4      
B
B;q>WS!__,
B
B
B
B
B
Br%   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_inrt   rv   )!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   rr   r   )r   rw   rx   ry   r   rT   rj   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      sq    
  C  

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

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


#
%
%Cc**GL,=,=<PPP Jr%   c                 8    t          j        dd          j        S )N T)rw   )r   r   scriptsr$   r%   r&   r   r     s     $///77r%   valuec                6    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)rI   )r   s    r&   $_looks_like_deb_system_dist_packagesr     s-     %&& u000t5r%   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.r8   rt   )	r   r   r   r)   r   ru   r   r   r   r   s     r&   r   r     sy    

 
"
"C 


 
"
"C+C00 
c**GL,=,=9MM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.   rt   )
r   r   r   r   r)   r   ru   r   r   r   )rj   r)   rh   s      r&   r   r     s    

 
"
"C 

 *
 
"
"C+C00 
c**GL,=,=9MMM Jr%   )r   r   )r3   r4   r   r   )rh   ri   rj   ri   re   r   r   rk   )rh   ri   rj   ri   re   r   r   r   )
rw   r   rx   rz   ry   rz   rT   rz   r   rk   )FNNFN)r   r   rw   r   rx   rz   ry   rz   r   r   rT   rz   r   r   )r   r   )r   r   r   r   )<
__future__r   	functoolsloggingrP   r   rS   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__rm   r!   r   __annotations__version_infor#   r'   r   r)   WARNINGro   DEBUGr2   r;   cacherE   rI   rV   r]   rg   rr   ru   r   r   r   r   r   r   r   r$   r%   r&   <module>r      s   " " " " " " "      				  



           ; ; ; ; ; ; ; ; . . . . . . 6 6 6 6 6 6 C C C C C C                        
	8	$	$ 73e44 4 4 4 4)W4 R R R R '&((    $. $oOOmO, , , ,J J J J     O O O O    & H H H H    " C C C C     L L L L L L( c c c c cL   8 8 8 8   "        r%   