
    .Ph4                       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	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 ej        d	         Z ej        e          Z G d
 dej                  Zd#d$dZ G d de          Z G d dej                  Z  G d de           Z! G d de           Z" ej#        d          d%d            Z$d&d"Z%ddgZ&dS )'    )annotationsN)
CollectionMapping   )_ctx)run_subprocess)FailedProcessError)check_dependency)pipuvc                  f    e Zd ZdZeej        dd                        Zej        d	d            ZdS )
IsolatedEnvzIsolated build environment ABC.returnstrc                    dS )z2The Python executable of the isolated environment.N selfs    I/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/build/env.pypython_executablezIsolatedEnv.python_executable             Mapping[str, str] | Nonec                    dS )zBGenerate additional env vars specific to the isolated environment.Nr   r   s    r   make_extra_environzIsolatedEnv.make_extra_environ$   r   r   Nr   r   )r   r   )	__name__
__module____qualname____doc__propertyabcabstractmethodr   r   r   r   r   r   r      st        ))A A A  XA 	Q Q Q Q Q Qr   r   namer   minimum_version_str
str | Nonedistargsobjectr   bool | Nonec          	         ddl m} ddlm} 	 t	          t           |j        j        dd| i|                    }n# t          $ r Y dS w xY w|dS  ||j	                   ||          k    S )	z
    Given a path, see if a package is present and return True if the version is
    sufficient for build, False if it is not, None if the package is missing.
    r   )Versionr   )	importlibr$   NTr   )
packaging.versionr+   _compatr,   nextitermetadatadistributionsStopIterationversion)r$   r%   r'   r+   r,   distributions         r   _has_dependencyr6   )   s    
 *)))))""""""D!A!3!A!X!Xt!Xx!X!XYYZZ   tt "t7<'((GG4G,H,HHHs   .= 
A
Ac                  p    e Zd ZdZddddZdd	ZddZedd            Zedd            Z	ddZ
ddZdS )DefaultIsolatedEnvz[
    Isolated environment which supports several different underlying implementations.
    r   	installerr:   	Installerr   Nonec                   || _         d S Nr9   )r   r:   s     r   __init__zDefaultIsolatedEnv.__init__B   s    
 %.r   c                   	 t          j        d          }t          j                            |          }|| _        |  | j        dk    rt                      | _        nt                      | _        t          j        d| j        j         d           | j                            | j                   n*# t          $ r  | j        t!          j                       w xY w| S )Nz
build-env-prefixr   zCreating isolated environment: z...)tempfilemkdtempospathrealpath_pathr:   
_UvBackend_env_backend_PipBackendr   logdisplay_namecreate	Exception__exit__sysexc_infor   rF   s     r   	__enter__zDefaultIsolatedEnv.__enter__I   s    	#<888D 7##D))DDJ* ~%%$.LL!!$/MM!HZt7H7UZZZ[[[$$TZ0000 	 	 	DM3<>>**	 s   B0B3 3'Cargsr(   c                    t           j                            | j                  rt	          j        | j                   d S d S r>   )rE   rF   existsrH   shutilrmtree)r   rU   s     r   rP   zDefaultIsolatedEnv.__exit__e   s<    7>>$*%% 	&M$*%%%%%	& 	&r   r   c                    | j         S )z/The location of the isolated build environment.)rH   r   s    r   rF   zDefaultIsolatedEnv.pathi   s     zr   c                    | j         j        S )z8The python executable of the isolated build environment.)rJ   r   r   s    r   r   z$DefaultIsolatedEnv.python_executablen   s      22r   dict[str, str]c                    t           j                            d          }d|+t           j                            | j        j        |g          n| j        j        iS )NPATH)rE   environgetpathsepjoinrJ   scripts_dirrS   s     r   r   z%DefaultIsolatedEnv.make_extra_environs   sR    z~~f%% JOOT%6%BD$IJJJ".
 	
r   requirementsCollection[str]c           	         |sdS t          j        dd                    d t          |          D                       z              | j                            |           dS )at  
        Install packages from PEP 508 requirements in the isolated build environment.

        :param requirements: PEP 508 requirement specification to install

        :note: Passing non-PEP 508 strings will result in undefined behavior, you *should not* rely on it. It is
               merely an implementation detail, it may change any time without warning.
        Nz-Installing packages in isolated environment:

c              3      K   | ]	}d | V  
dS )z- Nr   ).0rs     r   	<genexpr>z-DefaultIsolatedEnv.install.<locals>.<genexpr>   s*      MuMu[\hSThhMuMuMuMuMuMur   )r   rL   rb   sortedrJ   install_requirementsr   rd   s     r   installzDefaultIsolatedEnv.install{   si      	FADIIMuMu`fgs`t`tMuMuMuDuDuuvvv..|<<<<<r   N)r:   r;   r   r<   )r   r8   )rU   r(   r   r<   r   )r   r\   rd   re   r   r<   )r   r   r   r    r?   rT   rP   r!   rF   r   r   ro   r   r   r   r8   r8   =   s           %. . . . . .   8& & & &    X 3 3 3 X3
 
 
 
= = = = = =r   r8   c                  L    e Zd ZU ded<   ded<   ddZdd
Zedd            ZdS )_EnvBackendr   r   rc   rF   r   r<   c                    d S r>   r   rS   s     r   rN   z_EnvBackend.create   r   r   rd   re   c                    d S r>   r   rn   s     r   rm   z _EnvBackend.install_requirements   r   r   c                    d S r>   r   r   s    r   rM   z_EnvBackend.display_name   s    #&3r   NrF   r   r   r<   rp   r   )r   r   r   __annotations__rN   rm   r!   rM   r   r   r   rr   rr      sX         ,,,,NNNN&&& X&&&r   rr   c                      e Zd ZddZej        dd            Zej        dd            Zedd	            Z	ddZ
ddZedd            ZdS )rK   r   r<   c                .    | j          o| j        | _        d S r>   )_has_valid_outer_pip_has_virtualenv_create_with_virtualenvr   s    r   r?   z_PipBackend.__init__   s    +/+D'D']I]$$$r   r)   c                "    t          dd          S )z
        This checks for a valid global pip. Returns None if pip is missing, False
        if pip is too old, and True if it can be used.
        r   z22.3)r6   r   s    r   rz   z _PipBackend._has_valid_outer_pip   s     uf---r   boolc                    ddl m dt          j                                      duo-t          fdt          d d          D                        S )z
        virtualenv might be incompatible if it was installed separately
        from build. This verifies that virtualenv and all of its
        dependencies are installed as required by build.
        r   )Requirement
virtualenvNc              3  r   K   | ]1}t          |          d k     |d                    j        k    V  2dS )r   N)lenr$   )ri   dr   r$   s     r   rk   z._PipBackend._has_virtualenv.<locals>.<genexpr>   s[       F
 F
/0Z]^_Z`Z`cdZdZdKK!"d*ZdZdZdZdF
 F
r   zbuild[])packaging.requirementsr   r,   util	find_specanyr
   )r   r   r$   s    @@r   r{   z_PipBackend._has_virtualenv   s     	766666~''--T9 
# F
 F
 F
 F
 F
4DEUdEUEUEU4V4VF
 F
 F
 C
 C
 ?
 	
r   r   c                     t          j                    dk    rQt          j                    \  } }}t          | d |                     d                             dk    r|dk    }|rdndS dS )NDarwin.   x86_64z21.0.1z20.3.0z19.1.0)platformsystemmac_verintfind)release_machineis_apple_silicon_pythons       r   _get_minimum_pip_version_strz(_PipBackend._get_minimum_pip_version_str   sw    ?(("*"2"4"4GQ7.W\\#.../00B66 +2X*='#:HxxH xr   rF   c                   | j         r^dd l}|                    |ddddgd          }t          |j        j                  | _        t          |j        j                  | _        d S dd l	}| j
         }	 |                    t                      |                              |           n<# t          j        $ r*}t!          j        |           t%          |d	          d d }~ww xY wt'          |          \  | _        | _        }|rq|                                 }t+          d
||g          st-          | j        dd
dd| g           t+          d|g          rt-          | j        dd
dddg           d S d S d S )Nr   z--activators z--no-setuptoolsz
--no-wheelF)setup_loggingsymlinkswith_pipz7Failed to create venv. Maybe try installing virtualenv.r   )rF   -Imro   zpip>=
setuptools	uninstallz-y)r|   r   cli_runr   creatorexer   
script_dirrc   venvrz   
EnvBuilder_fs_supports_symlinkrN   
subprocessCalledProcessErrorr   log_subprocess_errorr	   _find_executable_and_scriptsr   r6   r   )	r   rF   r   resultr   r   excpurelibminimum_pip_version_strs	            r   rN   z_PipBackend.create   s   ' .	l''"%  $ ( 	 	F &));%<%<D""6>#<==D KKK44Hs)=)?)?(SSZZ[_````0 s s s)#...(.ghhnrrs A]]a@b@b=D"D$4g l*.*K*K*M*M'&+!   y
 #D$:E5)Uv]tUvUv#wxxx # !   l #D$:E5+W[]i#jkkkkkl ll ls   36B* *C#9%CC#rd   re   c           	     V   t          j        ddddd          5 }|                    t          j                            |                     d d d            n# 1 swxY w Y   	 | j        rt          j        ddd	| j	        g}n
| j	        d
dg}t          j        dk    r|ddt          j        dz
  z   gz  }|dddddt          j                            |j                  gz  }t          |           t          j        |j                   d S # t          j        |j                   w xY w)Nwzbuild-reqs-z.txtFzutf-8)rB   suffixdeleteencodingz-mr   z--pythonr   r   -vro   z--use-pep517z--no-warn-script-locationz--no-compilez-r)rC   NamedTemporaryFilewriterE   lineseprb   rz   rQ   
executabler   r   	verbosityrF   abspathr$   r   unlink)r   rd   req_filecmds       r   rm   z _PipBackend.install_requirements   sm    (]6Z_jqrrr 	:v~NN2:??<88999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:	%( =~tUJ@VW-ue<~!!8C4>A#568899+.. C 3 Ihm$$$$$BIhm$$$$s   3AA A%BD D(c                    | j         rdndS )Nzvirtualenv+pipzvenv+pip)r|   r   s    r   rM   z_PipBackend.display_name  s    #'#?OZOr   N)r   r<   )r   r)   r   r~   r   rv   rp   )r   r   r   r?   	functoolscached_propertyrz   r{   staticmethodr   rN   rm   r!   rM   r   r   r   rK   rK      s        ^ ^ ^ ^ . . . . 
 
 
 
    \/l /l /l /lb% % % %8 P P P XP P Pr   rK   c                  6    e Zd ZddZddZedd	            Zd
S )rI   rF   r   r   r<   c                   dd l }|| _        	 dd l}|                                | _        n]# t
          t          f$ rI t          j        d          }|d}t          |          d t          j        d|            || _        Y nw xY w|                    t                      d                              | j                   t          | j                  \  | _        | _        }d S )Nr   r   zuv executable not foundzUsing external uv from Fr   )r   	_env_pathr   find_uv_bin_uv_binModuleNotFoundErrorFileNotFoundErrorrX   whichRuntimeErrorr   rL   r   r   rN   r   r   rc   )r   rF   r   r   uv_binmsgr   s          r   rN   z_UvBackend.create  s    	"III>>++DLL#%67 	" 	" 	"\$''F~/"3''T1H7v77888!DLLL	" 	!5!7!7%HHOOPTP^___6RSWSa6b6b3 0!!!s   + ABBrd   re   c                    | j         dg}t          j        dk    r'|ddt          dt          j        dz
            z   gz  }t	          g |d|i t
          j        d| j        i           d S )	Nr   r   r   r      ro   VIRTUAL_ENV)env)r   r   r   minr   rE   r_   r   )r   rd   r   s      r   rm   z_UvBackend.install_requirements)  s    |U#>A:c!T^a%7888::;;C77i7,7=j
=jM[_[i=j=jkkkkkkr   c                    dS )Nzvenv+uvr   r   s    r   rM   z_UvBackend.display_name/  s    yr   Nrv   rp   r   )r   r   r   rN   rm   r!   rM   r   r   r   rI   rI     sd        c c c c*l l l l    X  r   rI   )maxsizer~   c                 D   t           j        dk    rdS t          j        d          5 } |  d}	 t          j        | j        |           t          j        |           n)# t          t          t          f$ r Y ddd           dS w xY w	 ddd           dS # 1 swxY w Y   dS )z%Return True if symlinks are supportedntTzbuild-symlink-rA   z-bNF)	rE   r$   rC   r   symlinkr   OSErrorNotImplementedErrorAttributeError)tmp_filedests     r   r   r   4  s    
w$t 
	$,<	=	=	= 	Jx}d+++IdOOOO,n= 	 	 	       
	                 s4   B.ABB5BBBBBrF   tuple[str, str, str]c                B   t          j                                                    }| |d<   t          j                    }d|v rt          j        d|          }nKd|v rt          j        d|          }n0d|v rt          j        d|          }nt          j        |          }t
          j                            |d         t
          j        d	k    rd
nd          }t
          j        	                    |          sd| d}t          |          ||d         |d         fS )z
    Detect the Python executable and script folder of a virtual environment.

    :param path: The location of the virtual environment
    :return: The Python executable, script folder, and purelib folder
    baser   )schemevarsposix_localposix_prefixosx_framework_library)r   scriptsr   z
python.exepythonz0Virtual environment creation failed, executable z missingr   )	sysconfigget_config_varscopyget_scheme_names	get_pathsrE   rF   rb   r$   rW   r   )rF   config_varsscheme_namespathsr   r   s         r   r   r   F  s)    +--2244KK-//L #6DDD	,	&	& #>LLL	 L	0	0 #>LLL#555eI.4U]^^J7>>*%%  UUUU3uY'y)999r   r>   )r$   r   r%   r&   r'   r(   r   r)   r   )rF   r   r   r   )'
__future__r   r"   r   importlib.utilr,   rE   r   rX   r   rQ   r   rC   typingcollections.abcr   r   r   r   r   _exceptionsr	   _utilr
   Literalr;   get_args
INSTALLERSProtocolr   r6   r8   rr   rK   rI   	lru_cacher   r   __all__r   r   r   <module>r      su   " " " " " " 



         				       



       / / / / / / / /                   + + + + + + # # # # # # N;'	V_Y''

Q 
Q 
Q 
Q 
Q&/ 
Q 
Q 
QI I I I I(K= K= K= K= K= K= K= K=\	' 	' 	' 	' 	'&/ 	' 	' 	'yP yP yP yP yP+ yP yP yPx       B T"""   #""(: (: (: (:X r   