U ��.e]�@sdZddlZddlZddlZddlZddlmZddlmZddl m Z ddl m Z m Z mZddlmZddlmZdd lmZdd lmZdd lmZer�dd lmZmZmZmZmZdd l m!Z!e�"e#�Z$Gdd�d�Z%Gdd�de&�Z'Gdd�de'�Z(dS)z;Build Environment used for isolation during sdist building �N)� OrderedDict)�get_python_lib)� get_paths)� Requirement�VersionConflict� WorkingSet)�__file__)�call_subprocess)� TempDirectory)�MYPY_CHECK_RUNNING)� open_spinner)�Tuple�Set�Iterable�Optional�List)� PackageFinderc@seZdZdd�ZdS)�_PrefixcCsj||_d|_ttjdkrdnd||d�d�d|_td|d�}td|d�}||kr\|g|_n ||g|_dS) NF�ntZ posix_prefix)�baseZplatbase)�varsZscripts)� plat_specific�prefixT)�path�setupr�os�name�bin_dirr�lib_dirs)�selfrZpurelibZplatlib�r �;/usr/lib/python3.8/site-packages/pip/_internal/build_env.py�__init__!s��   z_Prefix.__init__N)�__name__� __module__� __qualname__r"r r r r!rsrc@s@eZdZdZdd�Zdd�Zdd�Zdd �Zd d �Zd d �Z dS)�BuildEnvironmentzFCreates and manages an isolated environment to install build deps c s�tdd��_t�fdd�dD���_g�_g�_tt�j����D] }�j� |j ��j� |j �qBdd�t dd �t d d �fD�}tj��jjd ��_tj��j�s�t��j�ttj��jd �d ��"}|�t�d�j|�jd��W5QRXdS)Nz build-env)Zkindc3s(|] }|ttj��jj|��fVqdS�N)rrr�join� _temp_dir��.0r�rr r!� ;s�z,BuildEnvironment.__init__..)ZnormalZoverlaycSsh|]}tj�|��qSr )rr�normcase)r+�siter r r!� Isz,BuildEnvironment.__init__..F)rTr/zsitecustomize.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)r� _prefixes� _bin_dirs� _lib_dirs�reversed�list�values�appendr�extendrrrrr(� _site_dir�exists�mkdir�open�write�textwrap�dedent�format)rrr2�fpr r,r!r"7s0  � �� ��zBuildEnvironment.__init__cCsndd�dD�|_|jdd�}|jd}|r>|�|�tj��|jg}tj�tj� |�dtj� |�d��dS)NcSsi|]}|tj�|d��qSr')r�environ�getr*r r r!� os�z.BuildEnvironment.__enter__..)�PATHZPYTHONNOUSERSITEZ PYTHONPATHrG�1) � _save_envr4r:�splitr�pathsepr;rD�updater()rrZold_pathZ pythonpathr r r!� __enter__ns�   �zBuildEnvironment.__enter__cCs:|j��D]*\}}|dkr*tj�|d�q |tj|<q dSr')rI�itemsrrD�pop)r�exc_type�exc_val�exc_tbZvarname� old_valuer r r!�__exit__�szBuildEnvironment.__exit__cCs|j��dSr')r)�cleanupr,r r r!rU�szBuildEnvironment.cleanupc Cs�t�}t�}|r�t|j�}|D]p}z"|�t�|��dkrB|�|�Wqtk r�}z*|�t|j d� ��t|j d�f�W5d}~XYqXq||fS)z�Return 2 sets: - conflicting requirements: set of (installed, wanted) reqs tuples - missing requirements: set of reqs Nr�) �setrr5�findr�parse�addr�str�argsZas_requirement)rZreqsZmissingZ conflictingZwsZreq�er r r!�check_requirements�s  �z#BuildEnvironment.check_requirementsc CsV|j|}d|_|sdStjtj�t�dddd|jdg}t� �t j krP|� d�dD]:}t |j|�}|�d |�d d �d �t|p�d h��f�qT|j} | r�|�d| dg�| dd�D]} |�d| g�q�n |� d�|jD]} |�d| g�q�|jD]} |�d| g�q�|j�r|� d�|� d �|�|�t|��} t|| d�W5QRXdS)NTZinstallz--ignore-installedz --no-userz--prefixz--no-warn-script-locationz-v)Z no_binaryZ only_binaryz--�_�-�,z:none:z-irrVz--extra-index-urlz --no-indexz --find-linksz--trusted-hostz--pre)�spinner)r3r�sys� executablerr�dirname� pip_location�loggerZgetEffectiveLevel�logging�DEBUGr9�getattr�format_controlr:�replacer(�sorted� index_urlsZ find_linksZ trusted_hostsZallow_all_prereleasesr r )r�finder� requirementsZprefix_as_string�messagerr\rkZformatsrnZ extra_index�linkZhostrbr r r!�install_requirements�sH  �  �       z%BuildEnvironment.install_requirementsN) r#r$r%�__doc__r"rMrTrUr^rsr r r r!r&3s7r&c@s8eZdZdZdd�Zdd�Zdd�Zdd �Zd d �Zd S) �NoOpBuildEnvironmentz5A no-op drop-in replacement for BuildEnvironment cCsdSr'r r,r r r!r"�szNoOpBuildEnvironment.__init__cCsdSr'r r,r r r!rM�szNoOpBuildEnvironment.__enter__cCsdSr'r )rrPrQrRr r r!rT�szNoOpBuildEnvironment.__exit__cCsdSr'r r,r r r!rU�szNoOpBuildEnvironment.cleanupcCs t��dSr')�NotImplementedError)rrorprrqr r r!rs�sz)NoOpBuildEnvironment.install_requirementsN) r#r$r%rtr"rMrTrUrsr r r r!ru�s ru))rtrhrrcr@� collectionsrZdistutils.sysconfigrZ sysconfigrZpip._vendor.pkg_resourcesrrrZpiprrfZpip._internal.utils.subprocessr Zpip._internal.utils.temp_dirr Zpip._internal.utils.typingr Zpip._internal.utils.uir �typingr rrrrZpip._internal.indexrZ getLoggerr#rgr�objectr&rur r r r!�s*