o
    Ëý°j&  ã                   @   sb  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j3dee4 f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deddfdd„ZdS )Ú_PrefixÚpathÚreturnNc                 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)   úŠ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/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��R}tj	 
|j	d¡}i }tjdkr-d|d< tj|dfi |¤Ž�}|  d	¡D ]}| || | j¡ ¡ ¡ q=W d  ƒ n1 sVw   Y  tj	 
|d
¡V  W d  ƒ dS 1 snw   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"   €

ÿÿ"ørM   c                   @   sÈ   e Zd ZdZddd„Zddd„Zdeee  d	ee d
ee	 ddfdd„Z
dee deeeeef  ee f fdd„Zdddee dededdf
dd„Zededddee dededdfdd„ƒZdS )ÚBuildEnvironmentzACreates and manages an isolated environment to install build depsr   Nc                    s  t tjdd�‰ t‡ fdd„dD ƒƒ| _g | _g | _tt| j 	¡ ƒƒD ]}| j 
|j¡ | j |j¡ q"dd„ tƒ tƒ fD ƒ}tj ˆ jd¡| _tj | j¡sTt | j¡ ttj | jd	¡d
dd��}| t d¡j|| jd�¡ W d   ƒ d S 1 s{w   Y  d S )NT)r1   Ú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)rR   Úsiter)   r)   r*   Ú	<setcomp>Z   s    ÿz,BuildEnvironment.__init__.<locals>.<setcomp>rY   zsitecustomize.pyr5   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ÚopenrD   ÚtextwrapÚdedentÚformat)r(   Úprefixr\   Úfpr)   rS   r*   r+   I   s6   
þ
ÿÿÿçÿ"ý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 rP   )r$   ÚenvironÚgetrQ   r)   r)   r*   Ú
<dictcomp>�   s    ÿÿz.BuildEnvironment.__enter__.<locals>.<dictcomp>)ÚPATHÚPYTHONNOUSERSITEÚ
PYTHONPATHrr   Ú1)
Ú	_save_envr_   re   Úsplitr$   Úpathseprf   ro   Úupdater>   )r(   r   Úold_pathÚ
pythonpathr)   r)   r*   Ú	__enter__€   s   þ


ýÿzBuildEnvironment.__enter__Úexc_typeÚexc_valÚexc_tbc                 C   s:   | j  ¡ D ]\}}|d u rtj |d ¡ q|tj|< qd S rP   )rv   Úitemsr$   ro   Úpop)r(   r}   r~   r   ÚvarnameÚ	old_valuer)   r)   r*   Ú__exit__•   s
   üzBuildEnvironment.__exit__Úreqsc           	      C   sœ   t ƒ }t ƒ }|rJt| jƒ}|D ]:}t|ƒ}| |j¡}|s#| |¡ qt|jt	ƒr3|j› d|j› �}n	|j› d|j› �}|j|j
vrI| ||f¡ q||fS )zŽReturn 2 sets:
        - conflicting requirements: set of (installed, wanted) reqs tuples
        - missing requirements: set of reqs
        z==z===)Úsetr   r`   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_requirementsÚfinderr   ÚrequirementsÚprefix_as_stringr1   c                C   sp   | j | }|jr
J ‚d|_|sd S t ¡ �}| tƒ ¡}| j|||||d� W d   ƒ d S 1 s1w   Y  d S )NTr0   )r^   r#   Ú
contextlibÚ	ExitStackÚenter_contextrM   Ú_install_requirements)r(   r”   r•   r–   r1   rm   ÚctxÚpip_runnabler)   r)   r*   Úinstall_requirements»   s   


û"þz%BuildEnvironment.install_requirementsrœ   rm   c                C   st  t j| dddd|jdg}t ¡ tjkr| d¡ dD ]}t|j	|ƒ}| 
d| d	d
¡ d t|p2dhƒ¡f¡ q|j}|rW| 
d|d g¡ |dd … D ]	}	| 
d|	g¡ qLn| d¡ |jD ]	}
| 
d|
g¡ q_|jD ]	}| 
d|g¡ ql|jr~| d¡ |jr†| d¡ | d¡ | 
|¡ dtƒ i}td|› �ƒ�}t|d|› �||d� W d   ƒ d S 1 s³w   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ÚDEBUGrd   ÚgetattrÚformat_controlre   Úreplacer>   ÚsortedÚ
index_urlsÚ
find_linksÚtrusted_hostsÚallow_all_prereleasesÚprefer_binaryr   r   r   )rœ   r”   r•   rm   r1   Úargsr¯   Úformatsr²   Úextra_indexÚlinkÚhostr¨   r§   r)   r)   r*   rš   Ò   sX   
ø

þÿÿ







ü"ÿz&BuildEnvironment._install_requirements©r   N)r,   r-   r.   Ú__doc__r+   r|   r	   r   ÚBaseExceptionr   r„   r   r/   r   r
   r“   r�   Ústaticmethodr   rš   r)   r)   r)   r*   rN   F   sV    

7
þýü
ûÿ
þþýüú
ùÿþýüúùrN   c                
   @   sz   e Zd ZdZddd„Zddd„Zdeee  d	ee d
ee	 ddfdd„Z
ddd„Zdddee dededdf
dd„ZdS )ÚNoOpBuildEnvironmentz0A no-op drop-in replacement for BuildEnvironmentr   Nc                 C   ó   d S rP   r)   ©r(   r)   r)   r*   r+     ó   zNoOpBuildEnvironment.__init__c                 C   rÁ   rP   r)   rÂ   r)   r)   r*   r|     rÃ   zNoOpBuildEnvironment.__enter__r}   r~   r   c                 C   rÁ   rP   r)   )r(   r}   r~   r   r)   r)   r*   r„     s   zNoOpBuildEnvironment.__exit__c                 C   rÁ   rP   r)   rÂ   r)   r)   r*   Úcleanup  rÃ   zNoOpBuildEnvironment.cleanupr”   r   r•   r–   r1   c                C   s   t ƒ ‚rP   )ÚNotImplementedError)r(   r”   r•   r–   r1   r)   r)   r*   r�      s   z)NoOpBuildEnvironment.install_requirementsr¼   )r,   r-   r.   r½   r+   r|   r	   r   r¾   r   r„   rÄ   r   r/   r�   r)   r)   r)   r*   rÀ     s2    


þýü
û
þýüúùrÀ   )8r½   r—   r¬   r$   r8   r?   rj   rA   Úcollectionsr   Ú	sysconfigr   Útypesr   Útypingr   r   r   r   r	   r
   r   r   Úpip._vendor.certifir   Ú"pip._vendor.packaging.requirementsr   Úpip._vendor.packaging.versionr   r7   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/   rM   rN   rÀ   r)   r)   r)   r*   Ú<module>   s<    (
 G