a
    sh.-                     @  s  d Z ddlm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 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mZ ddl 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* ddl+m,Z, e-e.Z/ddddddZ0G dd dZ1ddddZ2ddddZ3G d d! d!eZ4G d"d# d#Z5G d$d% d%Z6G d&d' d'e6Z7dS )(z:Build Environment used for isolation during sdist building    )annotationsN)OrderedDict)Iterable)TracebackType)TYPE_CHECKINGProtocol)Version)__file__)open_spinner)get_platlibget_purelib
get_scheme)get_default_environmentget_environment)VERBOSE)get_requirement)call_subprocess)TempDirectorytempdir_kinds)PackageFinder)InstallRequirementstrztuple[str] | tuple[str, str])abreturnc                 C  s   | |kr| |fS | fS N )r   r   r   r   S/var/www/html/assistant/venv/lib/python3.9/site-packages/pip/_internal/build_env.py_dedup"   s    r   c                   @  s   e Zd ZdddddZdS )_Prefixr   None)pathr   c                 C  s4   || _ d| _td|d}|j| _t|j|j| _d S )NF )prefix)	r!   setupr   scriptsbin_dirr   purelibplatliblib_dirs)selfr!   schemer   r   r   __init__'   s
    z_Prefix.__init__N)__name__
__module____qualname__r,   r   r   r   r   r   &   s   r   r   c                  C  s.   t t j} |  s t| S t| d S )zGet a file to pass to a Python executable, to run the currently-running pip.

    This is used to run a pip subprocess, for installing requirements into the build
    environment.
    z__pip-runner__.py)	pathlibPathpip_locationresolveparentis_dirr   osfsdecode)sourcer   r   r   get_runnable_pip/   s    r:   zset[str]c                  C  s.   t tdrt } nt t g} dd | D S )zGet system site packages

    Usually from site.getsitepackages,
    but fallback on `get_purelib()/get_platlib()` if unavailable
    (e.g. in a virtualenv created by virtualenv<20)

    Returns normalized set of strings.
    getsitepackagesc                 S  s   h | ]}t j|qS r   )r7   r!   normcase).0r!   r   r   r   	<setcomp>P       z+_get_system_sitepackages.<locals>.<setcomp>)hasattrsiter;   r   r   )system_sitesr   r   r   _get_system_sitepackages?   s    	

rC   c                   @  s&   e Zd ZdZdddddddd	Zd
S )BuildEnvironmentInstallerz]
    Interface for installing build dependencies into an isolated build
    environment.
    Iterable[str]r   r   InstallRequirement | Noner    requirementsr#   kindfor_reqr   c                C  s   d S r   r   )r*   rH   r#   rI   rJ   r   r   r   installY   s    z!BuildEnvironmentInstaller.installN)r-   r.   r/   __doc__rK   r   r   r   r   rD   S   s   rD   c                   @  s6   e Zd ZdZdddddZddd	d
ddddZdS )#SubprocessBuildEnvironmentInstallerzD
    Install build dependencies by calling pip in a subprocess.
    r   r    )finderr   c                 C  s
   || _ d S r   )rN   )r*   rN   r   r   r   r,   h   s    z,SubprocessBuildEnvironmentInstaller.__init__rE   r   r   rF   rG   c                C  s  | j }tjt dddd|jddddd	g}t tjkrB|	d
 nt t
krX|	d dD ]:}t|j|}|d|dd dt|pdhf q\|j}	|	r|d|	d g |	dd  D ]}
|d|
g qn
|	d |jD ]}|d|g q|jr|d|jg |jD ]}|d|g q|jrF|d|jg |jr^|d|jg |jrp|	d |jr|	d |	d || td| $}t|d| |d  W d    n1 s0    Y  d S )!NrK   z--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz--disable-pip-version-checkz--no-compilez--targetr"   z-vvz-v)	no_binaryonly_binaryz--_-,z:none:z-ir      z--extra-index-urlz
--no-indexz--find-linksz--proxyz--trusted-hostz--certz--client-certz--prez--prefer-binaryzInstalling zpip subprocess to install )command_descspinner)rN   sys
executabler:   r!   loggergetEffectiveLevelloggingDEBUGappendr   getattrformat_controlextendreplacejoinsorted
index_urls
find_linksproxytrusted_hostsZcustom_certclient_certallow_all_prereleasesprefer_binaryr
   r   )r*   rH   r#   rI   rJ   rN   argsr_   formatsrd   extra_indexlinkhostrV   r   r   r   rK   k   sj    







z+SubprocessBuildEnvironmentInstaller.installN)r-   r.   r/   rL   r,   rK   r   r   r   r   rM   c   s   rM   c                   @  sn   e Zd ZdZdddddZdddd	Zd
ddddddZdddddZddddddddddZdS )BuildEnvironmentzACreates and manages an isolated environment to install build depsrD   r    )	installerr   c                   s   || _ ttjdd t fdddD | _g | _g | _tt	| j
 D ] }| j|j | j|j qJt }tj jd| _tj| jst| j ttj| jddd	d
,}|tdj|| jd W d    n1 s0    Y  d S )NT)rI   globally_managedc                 3  s&   | ]}|t tj j|fV  qd S r   )r   r7   r!   rb   r=   nametemp_dirr   r   	<genexpr>   s   z,BuildEnvironment.__init__.<locals>.<genexpr>)normaloverlayrA   zsitecustomize.pywz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)
                )rB   r)   )rq   r   r   	BUILD_ENVr   	_prefixes	_bin_dirs	_lib_dirsreversedlistvaluesr]   r&   r`   r)   rC   r7   r!   rb   	_site_direxistsmkdiropenwritetextwrapdedentformat)r*   rq   r#   rB   fpr   ru   r   r,      s2    
zBuildEnvironment.__init__r0   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 r   )r7   environgetrs   r   r   r   
<dictcomp>   s   z.BuildEnvironment.__enter__.<locals>.<dictcomp>)PATHPYTHONNOUSERSITE
PYTHONPATHr   1)
	_save_envr~   r`   splitr7   pathsepr   r   updaterb   )r*   r!   old_path
pythonpathr   r   r   	__enter__   s    


zBuildEnvironment.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Noneexc_typeexc_valexc_tbr   c                 C  s:   | j  D ]*\}}|d u r*tj|d  q
|tj|< q
d S r   )r   itemsr7   r   pop)r*   r   r   r   varname	old_valuer   r   r   __exit__  s    zBuildEnvironment.__exit__rE   z%tuple[set[tuple[str, str]], set[str]])reqsr   c           	      C  s   t  }t  }|rt| dr$t| jnt }|D ]}t|}|jdurV|jddisVq.||j	}|sr|
| q.t|jtr|j	 d|j }n|j	 d|j }|jj|jdds.|
||f q.||fS )	zReturn 2 sets:
        - conflicting requirements: set of (installed, wanted) reqs tuples
        - missing requirements: set of reqs
        r   Nextrar"   z==z===T)prereleases)setr@   r   r   r   r   markerevaluateget_distributionrt   add
isinstanceversionr   	specifiercontains)	r*   r   missingconflictingenvZreq_strreqdistZinstalled_req_strr   r   r   check_requirements  s*    
z#BuildEnvironment.check_requirementsNrJ   r   rF   rH   prefix_as_stringrI   rJ   r   c                C  s:   | j | }|jrJ d|_|s"d S | jj||||d d S )NT)rI   rJ   )r}   r$   rq   rK   )r*   rH   r   rI   rJ   r#   r   r   r   install_requirements1  s    

z%BuildEnvironment.install_requirements)	r-   r.   r/   rL   r,   r   r   r   r   r   r   r   r   rp      s   7(rp   c                   @  sj   e Zd ZdZddddZddddZdd	d
ddddZddddZddddddddddZdS )NoOpBuildEnvironmentz0A no-op drop-in replacement for BuildEnvironmentr    r0   c                 C  s   d S r   r   r*   r   r   r   r,   D  s    zNoOpBuildEnvironment.__init__c                 C  s   d S r   r   r   r   r   r   r   G  s    zNoOpBuildEnvironment.__enter__r   r   r   r   c                 C  s   d S r   r   )r*   r   r   r   r   r   r   r   J  s    zNoOpBuildEnvironment.__exit__c                 C  s   d S r   r   r   r   r   r   cleanupR  s    zNoOpBuildEnvironment.cleanupNr   rE   r   rF   r   c                C  s
   t  d S r   )NotImplementedError)r*   rH   r   rI   rJ   r   r   r   r   U  s    z)NoOpBuildEnvironment.install_requirements)	r-   r.   r/   rL   r,   r   r   r   r   r   r   r   r   r   A  s   	r   )8rL   
__future__r   r[   r7   r1   rA   rW   r   collectionsr   collections.abcr   typesr   typingr   r   Zpip._vendor.packaging.versionr   pipr	   r3   pip._internal.cli.spinnersr
   pip._internal.locationsr   r   r   Zpip._internal.metadatar   r   pip._internal.utils.loggingr   pip._internal.utils.packagingr   pip._internal.utils.subprocessr   pip._internal.utils.temp_dirr   r   "pip._internal.index.package_finderr   Zpip._internal.req.req_installr   	getLoggerr-   rY   r   r   r:   rC   rD   rM   rp   r   r   r   r   r   <module>   sB   
	Q 