a
    hbòf&  ã                   @   sd  d 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	 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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! ddl"m#Z#m$Z$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z, e�rddl-m.Z. e /e0¡Z1G dd„ dƒZ2ej3ee4 dœdd„ƒZ5G dd„ dƒZ6G dd„ de6ƒZ7dS )z;Build Environment used for isolation during sdist building
é    N)ÚOrderedDict)Ú	get_paths)ÚTracebackType)ÚTYPE_CHECKINGÚIterableÚIteratorÚListÚOptionalÚSetÚTupleÚType)Úwhere)ÚRequirement)ÚVersion)Ú__file__)Úopen_spinner)Úget_platlibÚget_prefixed_libsÚget_purelib)Úget_environment)Úcall_subprocess)ÚTempDirectoryÚtempdir_kinds)ÚPackageFinderc                   @   s   e Zd Zeddœdd„ZdS )Ú_PrefixN)ÚpathÚreturnc                 C   s@   || _ d| _ttjdkrdnd||dœd�d | _t|ƒ| _d S )NFÚntÚposix_prefix)ÚbaseÚplatbase)ÚvarsÚscripts)r   Úsetupr   ÚosÚnameÚbin_dirr   Úlib_dirs)Úselfr   © r)   úT/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pip/_internal/build_env.pyÚ__init__"   s    þýz_Prefix.__init__)Ú__name__Ú
__module__Ú__qualname__Ústrr+   r)   r)   r)   r*   r   !   s   r   ©r   c               	   c   sæ   t  t¡ ¡ j} |  ¡ s&t| ƒV  dS tdd��¢}tj	 
|j	d¡}i }tjdkrXd|d< tj|dfi |¤Ž�8}|  d	¡D ]}| || | j¡ ¡ ¡ qxW d  ƒ n1 sª0    Y  tj	 
|d
¡V  W d  ƒ n1 sØ0    Y  dS )z·Create a "standalone pip" zip file.

    The zip file's content is identical to the currently-running pip.
    It will be used to install requirements into the build environment.
    Nzstandalone-pip©Úkindz__env_pip__.zip)é   é   FÚstrict_timestampsÚwÚ*Úpip)ÚpathlibÚPathÚpip_locationÚresolveÚparentÚis_dirr/   r   r$   r   ÚjoinÚsysÚversion_infoÚzipfileÚZipFileÚrglobÚwriteÚrelative_toÚas_posix)ÚsourceÚtmp_dirÚpip_zipÚkwargsÚzfÚchildr)   r)   r*   Ú_create_standalone_pip,   s    

8rN   c                   @   s¶   e Zd ZdZddœdd„Zddœdd„Zeee  ee ee	 ddœd	d
„Z
ee eeeeef  ee f dœdd„Zdee eeddœdd„Zeedee eeddœdd„ƒZdS )ÚBuildEnvironmentzACreates and manages an isolated environment to install build depsNr0   c                    s  t tjdd�‰ t‡ fdd„dD ƒƒ| _g | _g | _tt| j 	¡ ƒƒD ] }| j 
|j¡ | j |j¡ qDdd„ tƒ tƒ fD ƒ}tj ˆ jd¡| _tj | j¡s¨t | j¡ ttj | jd	¡d
dd��,}| t d¡j|| jd�¡ W d   ƒ n1 sô0    Y  d S )NT)r2   Úglobally_managedc                 3   s&   | ]}|t tj ˆ j|¡ƒfV  qd S ©N)r   r$   r   r?   ©Ú.0r%   ©Útemp_dirr)   r*   Ú	<genexpr>L   s   ÿz,BuildEnvironment.__init__.<locals>.<genexpr>)ÚnormalÚoverlayc                 S   s   h | ]}t j |¡’qS r)   )r$   r   Únormcase)rS   Úsiter)   r)   r*   Ú	<setcomp>Z   s   z,BuildEnvironment.__init__.<locals>.<setcomp>rZ   zsitecustomize.pyr6   z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)
                )Úsystem_sitesr'   )r   r   Ú	BUILD_ENVr   Ú	_prefixesÚ	_bin_dirsÚ	_lib_dirsÚreversedÚlistÚvaluesÚappendr&   Úextendr'   r   r   r$   r   r?   Ú	_site_dirÚexistsÚmkdirÚopenrE   ÚtextwrapÚdedentÚformat)r(   Úprefixr]   Úfpr)   rT   r*   r+   I   s4    þ

ÿÿÿçÿ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 rQ   )r$   ÚenvironÚgetrR   r)   r)   r*   Ú
<dictcomp>�   s   ÿz.BuildEnvironment.__enter__.<locals>.<dictcomp>)ÚPATHÚPYTHONNOUSERSITEÚ
PYTHONPATHrs   Ú1)
Ú	_save_envr`   rf   Úsplitr$   Úpathseprg   rp   Úupdater?   )r(   r   Úold_pathÚ
pythonpathr)   r)   r*   Ú	__enter__€   s    þ


ýÿzBuildEnvironment.__enter__©Úexc_typeÚexc_valÚexc_tbr   c                 C   s:   | j  ¡ D ]*\}}|d u r*tj |d ¡ q
|tj|< q
d S rQ   )rw   Úitemsr$   rp   Úpop)r(   r   r€   r�   ÚvarnameÚ	old_valuer)   r)   r*   Ú__exit__•   s    zBuildEnvironment.__exit__)Úreqsr   c           	      C   sœ   t ƒ }t ƒ }|r”t| jƒ}|D ]t}t|ƒ}| |j¡}|sF| |¡ qt|jt	ƒrf|j› d|j› �}n|j› d|j› �}|j|j
vr| ||f¡ q||fS )zŽReturn 2 sets:
        - conflicting requirements: set of (installed, wanted) reqs tuples
        - missing requirements: set of reqs
        z==z===)Úsetr   ra   r   Úget_distributionr%   ÚaddÚ
isinstanceÚversionr   Ú	specifier)	r(   r‡   ÚmissingÚconflictingÚenvÚreq_strÚreqÚdistÚinstalled_req_strr)   r)   r*   Úcheck_requirements¡   s     

z#BuildEnvironment.check_requirementsr   ©ÚfinderÚrequirementsÚprefix_as_stringr2   r   c                C   sn   | j | }|jrJ ‚d|_|s"d S t ¡ �0}| tƒ ¡}| j|||||d� W d   ƒ n1 s`0    Y  d S )NTr1   )r_   r#   Ú
contextlibÚ	ExitStackÚenter_contextrN   Ú_install_requirements)r(   r—   r˜   r™   r2   rn   ÚctxÚpip_runnabler)   r)   r*   Úinstall_requirements»   s    


ûz%BuildEnvironment.install_requirements)rŸ   r—   r˜   rn   r2   r   c                C   sv  t j| dddd|jdg}t ¡ tjkr0| d¡ dD ]:}t|j	|ƒ}| 
d| d	d
¡ d t|pddhƒ¡f¡ q4|j}|r®| 
d|d g¡ |dd … D ]}	| 
d|	g¡ q˜n
| d¡ |jD ]}
| 
d|
g¡ q¾|jD ]}| 
d|g¡ qØ|jrü| d¡ |j�r| d¡ | d¡ | 
|¡ dtƒ i}td|› �ƒ�&}t|d|› �||d� W d   ƒ n1 �sh0    Y  d S )NÚinstallz--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz-v)Ú	no_binaryÚonly_binaryz--Ú_ú-ú,z:none:z-ir   é   z--extra-index-urlz
--no-indexz--find-linksz--trusted-hostz--prez--prefer-binaryÚ_PIP_STANDALONE_CERTzInstalling zpip subprocess to install )Úcommand_descÚspinnerÚextra_environ)r@   Ú
executabler   ÚloggerÚgetEffectiveLevelÚloggingÚDEBUGre   ÚgetattrÚformat_controlrf   Úreplacer?   ÚsortedÚ
index_urlsÚ
find_linksÚtrusted_hostsÚallow_all_prereleasesÚprefer_binaryr   r   r   )rŸ   r—   r˜   rn   r2   Úargsr²   Úformatsrµ   Úextra_indexÚlinkÚhostr«   rª   r)   r)   r*   r�   Ò   sT    
ø

þÿ







üz&BuildEnvironment._install_requirements)r,   r-   r.   Ú__doc__r+   r}   r	   r   ÚBaseExceptionr   r†   r   r/   r   r
   r•   r    Ústaticmethodr   r�   r)   r)   r)   r*   rO   F   s2   7
ûþùùrO   c                   @   sx   e Zd ZdZddœdd„Zddœdd„Zeee  ee ee	 ddœd	d
„Z
ddœdd„Zdee eeddœdd„ZdS )ÚNoOpBuildEnvironmentz0A no-op drop-in replacement for BuildEnvironmentNr0   c                 C   s   d S rQ   r)   ©r(   r)   r)   r*   r+     s    zNoOpBuildEnvironment.__init__c                 C   s   d S rQ   r)   rÃ   r)   r)   r*   r}     s    zNoOpBuildEnvironment.__enter__r~   c                 C   s   d S rQ   r)   )r(   r   r€   r�   r)   r)   r*   r†     s    zNoOpBuildEnvironment.__exit__c                 C   s   d S rQ   r)   rÃ   r)   r)   r*   Úcleanup  s    zNoOpBuildEnvironment.cleanupr   r–   c                C   s
   t ƒ ‚d S rQ   )ÚNotImplementedError)r(   r—   r˜   r™   r2   r)   r)   r*   r       s    z)NoOpBuildEnvironment.install_requirements)r,   r-   r.   r¿   r+   r}   r	   r   rÀ   r   r†   rÄ   r   r/   r    r)   r)   r)   r*   rÂ     s   
ûùrÂ   )8r¿   rš   r¯   r$   r9   r@   rk   rB   Úcollectionsr   Ú	sysconfigr   Útypesr   Útypingr   r   r   r   r	   r
   r   r   Úpip._vendor.certifir   Ú"pip._vendor.packaging.requirementsr   Zpip._vendor.packaging.versionr   r8   r   r;   Úpip._internal.cli.spinnersr   Úpip._internal.locationsr   r   r   Úpip._internal.metadatar   Úpip._internal.utils.subprocessr   Úpip._internal.utils.temp_dirr   r   Ú"pip._internal.index.package_finderr   Ú	getLoggerr,   r­   r   Úcontextmanagerr/   rN   rO   rÂ   r)   r)   r)   r*   Ú<module>   s:   (
 G