<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
U
    .e]                     @   s   d 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 ddl	m
Z
 ddlmZ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 erddlmZmZmZmZmZ ddl m!Z! e"e#Z$G dd dZ%G dd de&Z'G dd de'Z(dS )z;Build Environment used for isolation during sdist building
    N)OrderedDict)get_python_lib)	get_paths)RequirementVersionConflict
WorkingSet)__file__)call_subprocess)TempDirectory)MYPY_CHECK_RUNNING)open_spinner)TupleSetIterableOptionalList)PackageFinderc                   @   s   e Zd Zdd ZdS )_Prefixc                 C   sj   || _ d| _ttjdkrdnd||ddd | _td|d}td|d}||kr\|g| _n
||g| _d S )	NFntZposix_prefix)baseZplatbase)varsZscripts)plat_specificprefixT)pathsetupr   osnamebin_dirr   lib_dirs)selfr   ZpurelibZplatlib r    ;/usr/lib/python3.8/site-packages/pip/_internal/build_env.py__init__!   s    
z_Prefix.__init__N)__name__
__module____qualname__r"   r    r    r    r!   r      s   r   c                   @   s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )BuildEnvironmentzFCreates and manages an isolated environment to install build deps
    c              	      s   t dd _t fdddD  _g  _g  _tt j D ] } j	|j
  j|j qBdd tdd	td
d	fD }tj jjd _tj jst j ttj jdd"}|tdj| jd W 5 Q R X d S )Nz	build-env)Zkindc                 3   s(   | ] }|t tj jj|fV  qd S N)r   r   r   join	_temp_dir.0r   r   r    r!   	<genexpr>;   s   z,BuildEnvironment.__init__.<locals>.<genexpr>)ZnormalZoverlayc                 S   s   h | ]}t j|qS r    )r   r   normcase)r+   siter    r    r!   	<setcomp>I   s    z,BuildEnvironment.__init__.<locals>.<setcomp>F)r   Tr/   zsitecustomize.pywa  
                import os, site, sys

                # First, drop system-sites related paths.
                original_sys_path = sys.path[:]
                known_paths = set()
                for path in {system_sites!r}:
                    site.addsitedir(path, known_paths=known_paths)
                system_paths = set(
                    os.path.normcase(path)
                    for path in sys.path[len(original_sys_path):]
                )
                original_sys_path = [
                    path for path in original_sys_path
                    if os.path.normcase(path) not in system_paths
                ]
                sys.path = original_sys_path

                # Second, add lib directories.
                # ensuring .pth file are processed.
                for path in {lib_dirs!r}:
                    assert not path in sys.path
                    site.addsitedir(path)
                )system_sitesr   )r
   r)   r   	_prefixes	_bin_dirs	_lib_dirsreversedlistvaluesappendr   extendr   r   r   r   r(   	_site_direxistsmkdiropenwritetextwrapdedentformat)r   r   r2   fpr    r,   r!   r"   7   s0    
 zBuildEnvironment.__init__c                 C   sn   dd dD | _ | jd d  }| j d }|r>||tj | jg}tjtj	|dtj	|d d S )Nc                 S   s   i | ]}|t j|d qS r'   )r   environgetr*   r    r    r!   
<dictcomp>o   s    z.BuildEnvironment.__enter__.<locals>.<dictcomp>)PATHZPYTHONNOUSERSITEZ
PYTHONPATHrG   1)
	_save_envr4   r:   splitr   pathsepr;   rD   updater(   )r   r   Zold_pathZ
pythonpathr    r    r!   	__enter__n   s    


zBuildEnvironment.__enter__c                 C   s:   | j  D ]*\}}|d kr*tj|d  q
|tj|< q
d S r'   )rI   itemsr   rD   pop)r   exc_typeexc_valexc_tbZvarname	old_valuer    r    r!   __exit__   s    zBuildEnvironment.__exit__c                 C   s   | j   d S r'   )r)   cleanupr,   r    r    r!   rU      s    zBuildEnvironment.cleanupc                 C   s   t  }t  }|rt| j}|D ]p}z"|t|dkrB|| W q tk
r } z*|t|j	d 
 t|j	d f W 5 d}~X Y qX q||fS )zReturn 2 sets:
            - conflicting requirements: set of (installed, wanted) reqs tuples
            - missing requirements: set of reqs
        Nr      )setr   r5   findr   parseaddr   strargsZas_requirement)r   ZreqsZmissingZconflictingZwsZreqer    r    r!   check_requirements   s    
z#BuildEnvironment.check_requirementsc              	   C   sb  | j | }|jrtd|_|s"d S tjtjtdddd|jdg}t	
 tjkrZ|d dD ]:}t|j|}|d	|d
d dt|pdhf q^|j}	|	r|d|	d g |	dd  D ]}
|d|
g qn
|d |jD ]}|d|g q|jD ]}|d|g q|jr*|d |d	 || t|}t||d W 5 Q R X d S )NTZinstallz--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz-v)Z	no_binaryZonly_binaryz--_-,z:none:z-ir   rV   z--extra-index-urlz
--no-indexz--find-linksz--trusted-hostz--pre)spinner)r3   r   AssertionErrorsys
executabler   r   dirnamepip_locationloggerZgetEffectiveLevelloggingDEBUGr9   getattrformat_controlr:   replacer(   sorted
index_urlsZ
find_linksZtrusted_hostsZallow_all_prereleasesr   r	   )r   finderrequirementsZprefix_as_stringmessager   r\   rl   Zformatsro   Zextra_indexlinkZhostrb   r    r    r!   install_requirements   sJ    

 
    







z%BuildEnvironment.install_requirementsN)
r#   r$   r%   __doc__r"   rM   rT   rU   r^   rt   r    r    r    r!   r&   3   s   7r&   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )NoOpBuildEnvironmentz5A no-op drop-in replacement for BuildEnvironment
    c                 C   s   d S r'   r    r,   r    r    r!   r"      s    zNoOpBuildEnvironment.__init__c                 C   s   d S r'   r    r,   r    r    r!   rM      s    zNoOpBuildEnvironment.__enter__c                 C   s   d S r'   r    )r   rP   rQ   rR   r    r    r!   rT      s    zNoOpBuildEnvironment.__exit__c                 C   s   d S r'   r    r,   r    r    r!   rU      s    zNoOpBuildEnvironment.cleanupc                 C   s
   t  d S r'   )NotImplementedError)r   rp   rq   r   rr   r    r    r!   rt      s    z)NoOpBuildEnvironment.install_requirementsN)	r#   r$   r%   ru   r"   rM   rT   rU   rt   r    r    r    r!   rv      s   rv   ))ru   ri   r   rd   r@   collectionsr   Zdistutils.sysconfigr   Z	sysconfigr   Zpip._vendor.pkg_resourcesr   r   r   Zpipr   rg   Zpip._internal.utils.subprocessr	   Zpip._internal.utils.temp_dirr
   Zpip._internal.utils.typingr   Zpip._internal.utils.uir   typingr   r   r   r   r   Zpip._internal.indexr   Z	getLoggerr#   rh   r   objectr&   rv   r    r    r    r!   <module>   s*   
 