a
    ‡Ààg™  ã                   @   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mZ ddlmZ erØddlmZ ddlmZ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__)Úopen_spinner)Úcall_subprocess)ÚTempDirectoryÚtempdir_kinds)ÚMYPY_CHECK_RUNNING)ÚTracebackType)ÚIterableÚListÚOptionalÚSetÚTupleÚType)Ú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ÚntÚposix_prefix)ÚbaseÚplatbase)ÚvarsÚscripts)Úplat_specificÚprefixT)ÚpathÚsetupr   ÚosÚnameÚbin_dirr   Úlib_dirs)Úselfr   ÚpurelibÚplatlib© r(   úP/var/www/sistema_ama/venv/lib/python3.9/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                   @   s8   e Zd Z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 tjdd�‰ t‡ fdd„dD ƒƒ| _g | _g | _tt| j 	¡ ƒƒD ] }| j 
|j¡ | j |j¡ qDdd„ tdd	�tdd	�fD ƒ}tj ˆ jd
¡| _tj | j¡s°t | j¡ ttj | jd¡dƒ�,}| t d¡j|| jd�¡ W d   ƒ n1 sø0    Y  d S )NT)ÚkindÚglobally_managedc                 3   s&   | ]}|t tj ˆ j|¡ƒfV  qd S ©N)r   r!   r   Újoin©Ú.0r"   ©Útemp_dirr(   r)   Ú	<genexpr>;   s   ÿz,BuildEnvironment.__init__.<locals>.<genexpr>)ÚnormalÚoverlayc                 S   s   h | ]}t j |¡’qS r(   )r!   r   Únormcase)r4   Úsiter(   r(   r)   Ú	<setcomp>I   s   z,BuildEnvironment.__init__.<locals>.<setcomp>F)r   r;   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   Ú	BUILD_ENVr   Ú	_prefixesÚ	_bin_dirsÚ	_lib_dirsÚreversedÚlistÚvaluesÚappendr#   Úextendr$   r   r!   r   r2   Ú	_site_dirÚexistsÚmkdirÚopenÚwriteÚtextwrapÚdedentÚformat)r%   r   r>   Úfpr(   r5   r)   r*   5   s2    ÿþ
þÿÿç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 r1   )r!   ÚenvironÚgetr3   r(   r(   r)   Ú
<dictcomp>p   s   ÿz.BuildEnvironment.__enter__.<locals>.<dictcomp>)ÚPATHZPYTHONNOUSERSITEÚ
PYTHONPATHrT   Ú1)
Ú	_save_envrA   rG   Úsplitr!   ÚpathseprH   rQ   Úupdater2   )r%   r   Zold_pathZ
pythonpathr(   r(   r)   Ú	__enter__n   s    þ


ýzBuildEnvironment.__enter__c                 C   s:   | j  ¡ D ]*\}}|d u r*tj |d ¡ q
|tj|< q
d S r1   )rW   Úitemsr!   rQ   Úpop)r%   Úexc_typeÚexc_valÚexc_tbZvarnameÚ	old_valuer(   r(   r)   Ú__exit__‚   s    zBuildEnvironment.__exit__c                 C   sš   t ƒ }t ƒ }|r’t| jƒ}|D ]r}z"| t |¡¡du rB| |¡ W q tyŽ } z2| t|j	d  
¡ ƒt|j	d ƒf¡ W Y d}~qd}~0 0 q||fS )z–Return 2 sets:
            - conflicting requirements: set of (installed, wanted) reqs tuples
            - missing requirements: set of reqs
        Nr   é   )Úsetr   rB   Úfindr   ÚparseÚaddr   ÚstrÚargsÚas_requirement)r%   ÚreqsÚmissingÚconflictingÚwsÚreqÚer(   r(   r)   Úcheck_requirements�   s    
ÿz#BuildEnvironment.check_requirementsc                 C   sŠ  | j | }|jrJ ‚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|pŽdhƒ¡f¡ q^|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	¡ | |¡ t|ƒ�}t||d� W d   ƒ n1 �s|0    Y  d S )NTÚinstallz--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz-v)Ú	no_binaryÚonly_binaryz--Ú_ú-ú,z:none:z-ir   rc   z--extra-index-urlz
--no-indexz--find-linksz--trusted-hostz--prez--prefer-binary)Úspinner)r@   r    ÚsysÚ
executabler!   r   ÚdirnameÚpip_locationÚloggerÚgetEffectiveLevelÚloggingÚDEBUGrF   ÚgetattrÚformat_controlrG   Úreplacer2   ÚsortedÚ
index_urlsÚ
find_linksÚtrusted_hostsÚallow_all_prereleasesÚprefer_binaryr	   r
   )r%   ÚfinderÚrequirementsÚprefix_as_stringÚmessager   ri   r‚   Úformatsr…   Zextra_indexÚlinkÚhostrx   r(   r(   r)   Úinstall_requirements¢   sD    


ý
ÿ







z%BuildEnvironment.install_requirementsN)	r+   r,   r-   Ú__doc__r*   r[   rb   rq   r‘   r(   r(   r(   r)   r.   1   s   9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 r1   r(   ©r%   r(   r(   r)   r*   Õ   s    zNoOpBuildEnvironment.__init__c                 C   s   d S r1   r(   r”   r(   r(   r)   r[   Ù   s    zNoOpBuildEnvironment.__enter__c                 C   s   d S r1   r(   )r%   r^   r_   r`   r(   r(   r)   rb   Ý   s    zNoOpBuildEnvironment.__exit__c                 C   s   d S r1   r(   r”   r(   r(   r)   Úcleanupæ   s    zNoOpBuildEnvironment.cleanupc                 C   s
   t ƒ ‚d S r1   )ÚNotImplementedError)r%   rŠ   r‹   rŒ   r�   r(   r(   r)   r‘   ê   s    z)NoOpBuildEnvironment.install_requirementsN)	r+   r,   r-   r’   r*   r[   rb   r•   r‘   r(   r(   r(   r)   r“   Ñ   s   	r“   )-r’   r   r!   ry   rM   Úcollectionsr   Údistutils.sysconfigr   Ú	sysconfigr   Úpip._vendor.pkg_resourcesr   r   r   Úpipr   r|   Úpip._internal.cli.spinnersr	   Úpip._internal.utils.subprocessr
   Úpip._internal.utils.temp_dirr   r   Úpip._internal.utils.typingr   Útypesr   Útypingr   r   r   r   r   r   Ú"pip._internal.index.package_finderr   Ú	getLoggerr+   r}   r   Úobjectr.   r“   r(   r(   r(   r)   Ú<module>   s,    
 !