a
    ýÓEb&  ã                   @   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)   úW/home/ja/django-apps/lartica_env/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)ÚsourceZtmp_dirZpip_zipÚkwargsÚzfÚchildr)   r)   r*   Ú_create_standalone_pip,   s    

8rL   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>)ÚnormalZoverlayc                 S   s   h | ]}t j |¡’qS r)   )r$   r   Únormcase)rQ   Úsiter)   r)   r*   Ú	<setcomp>Z   s   z,BuildEnvironment.__init__.<locals>.<setcomp>rW   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(   ÚprefixrZ   Úfpr)   rR   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 rO   )r$   ÚenvironÚgetrP   r)   r)   r*   Ú
<dictcomp>�   s   ÿz.BuildEnvironment.__enter__.<locals>.<dictcomp>)ÚPATHZPYTHONNOUSERSITEÚ
PYTHONPATHrp   Ú1)
Ú	_save_envr]   rc   Úsplitr$   Úpathseprd   rm   Úupdater?   )r(   r   Zold_pathZ
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 rO   )rs   Úitemsr$   rm   Úpop)r(   ry   rz   r{   Z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   r^   r   Úget_distributionr%   ÚaddÚ
isinstanceÚversionr   Ú	specifier)	r(   r€   ÚmissingÚconflictingÚenvZreq_strÚreqÚdistZ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_contextrL   Ú_install_requirements)r(   rŽ   r�   r�   r2   rk   ÚctxÚpip_runnabler)   r)   r*   Úinstall_requirements»   s    


ûz%BuildEnvironment.install_requirements)r–   rŽ   r�   rk   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ÚDEBUGrb   ÚgetattrÚformat_controlrc   Úreplacer?   ÚsortedÚ
index_urlsÚ
find_linksÚtrusted_hostsÚallow_all_prereleasesÚprefer_binaryr   r   r   )r–   rŽ   r�   rk   r2   Úargsr©   Úformatsr¬   Zextra_indexÚlinkÚhostr¢   r¡   r)   r)   r*   r”   Ò   sT    
ø

þÿ







üz&BuildEnvironment._install_requirements)r,   r-   r.   Ú__doc__r+   rw   r	   r   ÚBaseExceptionr   r   r   r/   r   r
   rŒ   r—   Ústaticmethodr   r”   r)   r)   r)   r*   rM   F   s2   7
ûþùùrM   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 rO   r)   ©r(   r)   r)   r*   r+     s    zNoOpBuildEnvironment.__init__c                 C   s   d S rO   r)   r¹   r)   r)   r*   rw     s    zNoOpBuildEnvironment.__enter__rx   c                 C   s   d S rO   r)   )r(   ry   rz   r{   r)   r)   r*   r     s    zNoOpBuildEnvironment.__exit__c                 C   s   d S rO   r)   r¹   r)   r)   r*   Úcleanup  s    zNoOpBuildEnvironment.cleanupr   r�   c                C   s
   t ƒ ‚d S rO   )ÚNotImplementedError)r(   rŽ   r�   r�   r2   r)   r)   r*   r—      s    z)NoOpBuildEnvironment.install_requirements)r,   r-   r.   rµ   r+   rw   r	   r   r¶   r   r   rº   r   r/   r—   r)   r)   r)   r*   r¸     s   
ûùr¸   )8rµ   r‘   r¦   r$   r9   r@   rh   rB   Úcollectionsr   Ú	sysconfigr   Útypesr   Útypingr   r   r   r   r	   r
   r   r   Úpip._vendor.certifir   Ú"pip._vendor.packaging.requirementsr   Ú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/   rL   rM   r¸   r)   r)   r)   r*   Ú<module>   s:   (
 G