a
    baiy7                     @  s  d Z 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 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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+ er2ddl,m-Z- ddl.m/Z/ G dd deddZ0e1e2Z3ddddddZ4G dd dZ5ddd d!Z6d"dd#d$Z7G d%d& d&eZ8G d'd( d(Z9G d)d* d*Z:G d+d, d,e:Z;dS )-z:Build Environment used for isolation during sdist building    )annotationsN)OrderedDict)Iterable)TracebackType)TYPE_CHECKINGProtocol	TypedDict)Version)__file__)open_spinner)get_platlibget_purelib
get_scheme)get_default_environmentget_environment)
deprecated)VERBOSE)get_requirement)call_subprocess)TempDirectorytempdir_kinds)PackageFinder)InstallRequirementc                   @  s   e Zd ZU ded< dS )ExtraEnvironzdict[str, str]extra_environN)__name__
__module____qualname____annotations__ r   r   Q/var/www/html/SiteWeb/venv/lib/python3.9/site-packages/pip/_internal/build_env.pyr       s   
r   F)totalstrztuple[str] | tuple[str, str])abreturnc                 C  s   | |kr| |fS | fS Nr   )r#   r$   r   r   r    _dedup'   s    r'   c                   @  s   e Zd ZdddddZdS )_Prefixr"   None)pathr%   c                 C  s4   || _ d| _td|d}|j| _t|j|j| _d S )NF )prefix)	r*   setupr   scriptsbin_dirr'   purelibplatliblib_dirs)selfr*   schemer   r   r    __init__,   s
    z_Prefix.__init__N)r   r   r   r5   r   r   r   r    r(   +   s   r(   r%   c                  C  s.   t t j} |  s t| S t| d S )zGet a file to pass to a Python executable, to run the currently-running pip.

    This is used to run a pip subprocess, for installing requirements into the build
    environment.
    z__pip-runner__.py)	pathlibPathpip_locationresolveparentis_dirr"   osfsdecode)sourcer   r   r    get_runnable_pip4   s    r@   zset[str]c                  C  s.   t tdrt } nt t g} dd | D S )zGet system site packages

    Usually from site.getsitepackages,
    but fallback on `get_purelib()/get_platlib()` if unavailable
    (e.g. in a virtualenv created by virtualenv<20)

    Returns normalized set of strings.
    getsitepackagesc                 S  s   h | ]}t j|qS r   )r=   r*   normcase).0r*   r   r   r    	<setcomp>U       z+_get_system_sitepackages.<locals>.<setcomp>)hasattrsiterA   r   r   )system_sitesr   r   r    _get_system_sitepackagesD   s    	

rI   c                   @  s&   e Zd ZdZdddddddd	Zd
S )BuildEnvironmentInstallerz]
    Interface for installing build dependencies into an isolated build
    environment.
    Iterable[str]r(   r"   InstallRequirement | Noner)   requirementsr,   kindfor_reqr%   c                C  s   d S r&   r   )r3   rN   r,   rO   rP   r   r   r    install^   s    z!BuildEnvironmentInstaller.installN)r   r   r   __doc__rQ   r   r   r   r    rJ   X   s   rJ   c                   @  sJ   e Zd ZdZddddddd	d
ZddddZddddddddZdS )#SubprocessBuildEnvironmentInstallerzD
    Install build dependencies by calling pip in a subprocess.
    NFr   zlist[str] | Noneboolr)   )finderbuild_constraints build_constraint_feature_enabledr%   c                 C  s   || _ |pg | _|| _d S r&   )rU   _build_constraints!_build_constraint_feature_enabled)r3   rU   rV   rW   r   r   r    r5   m   s    
z,SubprocessBuildEnvironmentInstaller.__init__r6   c                 C  s@   | j s| jrdS tjd}|r(| s,dS tddddd dS )z
        Check for deprecation warning: PIP_CONSTRAINT affecting build environments.

        This warns when build-constraint feature is NOT enabled and PIP_CONSTRAINT
        is not empty.
        NZPIP_CONSTRAINTzGSetting PIP_CONSTRAINT will not affect build constraints in the future,zto specify build constraints using --build-constraint or PIP_BUILD_CONSTRAINT. To disable this warning without any build constraints set --use-feature=build-constraint or PIP_USE_FEATURE="build-constraint"z26.2)reasonreplacementgone_inissue)rY   rX   r=   environgetstripr   )r3   Zpip_constraintr   r   r    _deprecation_constraint_checkw   s    zASubprocessBuildEnvironmentInstaller._deprecation_constraint_checkrK   r(   r"   rL   rM   c                C  sx  |    | j}tjt dddd|jddddd	g}t tj	krJ|
d
 nt tkr`|
d dD ]:}t|j|}|d|dd dt|pdhf qd|j}	|	r|d|	d g |	dd  D ]}
|d|
g qn
|
d |jD ]}|d|g q|jr|d|jg |jD ]}|d|g q |jrN|d|jg |jrf|d|jg |jrx|
d |jr|
d | jr|ddg | jr| jD ]"}|d |g |d!|g qi }| jr| jsd"d#d$ii}|
d || |r |jr d%|j nd	}td&| 0}t|fd'| | |d(| W d    n1 sj0    Y  d S ))NrQ   z--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz--disable-pip-version-checkz--no-compilez--targetr+   z-vvz-v)	no_binaryonly_binaryz--_-,z:none:z-ir      z--extra-index-urlz
--no-indexz--find-linksz--proxyz--trusted-hostz--certz--client-certz--prez--prefer-binaryz--use-featurezbuild-constraintz--constraintz--build-constraintr   Z _PIP_IN_BUILD_IGNORE_CONSTRAINTS1z for zInstalling zinstalling )command_descspinner)ra   rU   sys
executabler@   r*   loggergetEffectiveLevelloggingDEBUGappendr   getattrformat_controlextendreplacejoinsorted
index_urls
find_linksproxytrusted_hostsZcustom_certclient_certallow_all_prereleasesprefer_binaryrY   rX   namer   r   )r3   rN   r,   rO   rP   rU   argsrs   formatsrx   extra_indexlinkhostZconstraint_filer   Zidentify_requirementrj   r   r   r    rQ      s    








z+SubprocessBuildEnvironmentInstaller.install)NF)r   r   r   rR   r5   ra   rQ   r   r   r   r    rS   h   s     
rS   c                   @  sn   e Zd ZdZdddddZdddd	Zd
ddddddZdddddZddddddddddZdS )BuildEnvironmentzACreates and manages an isolated environment to install build depsrJ   r)   )	installerr%   c                   s   || _ ttjdd t fdddD | _g | _g | _tt	| j
 D ] }| j|j | j|j qJt }tj jd| _tj| jst| j ttj| jddd	d
,}|tdj|| jd W d    n1 s0    Y  d S )NT)rO   globally_managedc                 3  s&   | ]}|t tj j|fV  qd S r&   )r(   r=   r*   rv   rC   r   temp_dirr   r    	<genexpr>   s   z,BuildEnvironment.__init__.<locals>.<genexpr>)normaloverlayrG   zsitecustomize.pywzutf-8)encodinga  
                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)
                )rH   r2   )r   r   r   	BUILD_ENVr   	_prefixes	_bin_dirs	_lib_dirsreversedlistvaluesrq   r/   rt   r2   rI   r=   r*   rv   	_site_direxistsmkdiropenwritetextwrapdedentformat)r3   r   r,   rH   fpr   r   r    r5      s2    
zBuildEnvironment.__init__r6   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=   r^   r_   r   r   r   r    
<dictcomp>3  s   z.BuildEnvironment.__enter__.<locals>.<dictcomp>)PATHPYTHONNOUSERSITE
PYTHONPATHr   rh   )
	_save_envr   rt   splitr=   pathsepr   r^   updaterv   )r3   r*   old_path
pythonpathr   r   r    	__enter__2  s    


zBuildEnvironment.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Noneexc_typeexc_valexc_tbr%   c                 C  s:   | j  D ]*\}}|d u r*tj|d  q
|tj|< q
d S r&   )r   itemsr=   r^   pop)r3   r   r   r   varname	old_valuer   r   r    __exit__G  s    zBuildEnvironment.__exit__rK   z%tuple[set[tuple[str, str]], set[str]])reqsr%   c           	      C  s   t  }t  }|rt| dr$t| jnt }|D ]}t|}|jdurV|jddisVq.||j	}|sr|
| q.t|jtr|j	 d|j }n|j	 d|j }|jj|jdds.|
||f q.||fS )	zReturn 2 sets:
        - conflicting requirements: set of (installed, wanted) reqs tuples
        - missing requirements: set of reqs
        r   Nextrar+   z==z===T)prereleases)setrF   r   r   r   r   markerevaluateget_distributionr   add
isinstanceversionr	   	specifiercontains)	r3   r   missingconflictingenvZreq_strreqdistZinstalled_req_strr   r   r    check_requirementsS  s*    
z#BuildEnvironment.check_requirementsNrP   r"   rL   rN   prefix_as_stringrO   rP   r%   c                C  s:   | j | }|jrJ d|_|s"d S | jj||||d d S )NT)rO   rP   )r   r-   r   rQ   )r3   rN   r   rO   rP   r,   r   r   r    install_requirementsu  s    

z%BuildEnvironment.install_requirements)	r   r   r   rR   r5   r   r   r   r   r   r   r   r    r      s   7(r   c                   @  sj   e Zd ZdZddddZddddZdd	d
ddddZddddZddddddddddZdS )NoOpBuildEnvironmentz0A no-op drop-in replacement for BuildEnvironmentr)   r6   c                 C  s   d S r&   r   r3   r   r   r    r5     s    zNoOpBuildEnvironment.__init__c                 C  s   d S r&   r   r   r   r   r    r     s    zNoOpBuildEnvironment.__enter__r   r   r   r   c                 C  s   d S r&   r   )r3   r   r   r   r   r   r    r     s    zNoOpBuildEnvironment.__exit__c                 C  s   d S r&   r   r   r   r   r    cleanup  s    zNoOpBuildEnvironment.cleanupNr   rK   r"   rL   r   c                C  s
   t  d S r&   )NotImplementedError)r3   rN   r   rO   rP   r   r   r    r     s    z)NoOpBuildEnvironment.install_requirements)	r   r   r   rR   r5   r   r   r   r   r   r   r   r    r     s   	r   )<rR   
__future__r   ro   r=   r7   rG   rk   r   collectionsr   collections.abcr   typesr   typingr   r   r   Zpip._vendor.packaging.versionr	   pipr
   r9   pip._internal.cli.spinnersr   pip._internal.locationsr   r   r   Zpip._internal.metadatar   r   pip._internal.utils.deprecationr   pip._internal.utils.loggingr   pip._internal.utils.packagingr   pip._internal.utils.subprocessr   pip._internal.utils.temp_dirr   r   "pip._internal.index.package_finderr   Zpip._internal.req.req_installr   r   	getLoggerr   rm   r'   r(   r@   rI   rJ   rS   r   r   r   r   r   r    <module>   sH   
	  