o
    Zh)                  
   @   s  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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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rddl-m.Z. e/e0Z1de2de2deee2 ee2e2f f fddZ3G dd dZ4de2fddZ5dee2 fddZ6G dd dZ7G dd de7Z8dS ) z;Build Environment used for isolation during sdist building
    N)OrderedDict)TracebackType)TYPE_CHECKINGIterableListOptionalSetTupleTypeUnion)where)Version)__file__)open_spinner)get_platlibget_purelib
get_scheme)get_default_environmentget_environment)VERBOSE)get_requirement)call_subprocess)TempDirectorytempdir_kinds)PackageFinderabreturnc                 C   s   | |kr| |fS | fS N )r   r   r   r   N/var/www/html/lang_env/lib/python3.10/site-packages/pip/_internal/build_env.py_dedup    s   r!   c                   @   s   e Zd ZdeddfddZdS )_Prefixpathr   Nc                 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__)__name__
__module____qualname__strr.   r   r   r   r    r"   $   s    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_dirr2   osfsdecode)sourcer   r   r    get_runnable_pip-   s   r<   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   )r9   r#   normcase).0r#   r   r   r    	<setcomp>N   s    z+_get_system_sitepackages.<locals>.<setcomp>)hasattrsiter=   r   r   )system_sitesr   r   r    _get_system_sitepackages=   s   
	
rD   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"t }tj jd| _tj| jsLt| j ttj| jddd	d
}|tdj|| jd W d    d S 1 ssw   Y  d S )NT)kindglobally_managedc                 3   s(    | ]}|t tj j|fV  qd S r   )r"   r9   r#   joinr?   nametemp_dirr   r    	<genexpr>W   s
    
z,BuildEnvironment.__init__.<locals>.<genexpr>)normaloverlayrB   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)
                )rC   r+   )r   r   	BUILD_ENVr   	_prefixes	_bin_dirs	_lib_dirsreversedlistvaluesappendr(   extendr+   rD   r9   r#   rH   	_site_direxistsmkdiropenwritetextwrapdedentformat)r,   r%   rC   fpr   rK   r    r.   T   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 r   )r9   environgetrI   r   r   r    
<dictcomp>   s    z.BuildEnvironment.__enter__.<locals>.<dictcomp>)PATHPYTHONNOUSERSITE
PYTHONPATHrg   1)
	_save_envrT   rZ   splitr9   pathsepr[   rd   updaterH   )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 r   )rk   itemsr9   rd   pop)r,   rr   rs   rt   varname	old_valuer   r   r    __exit__   s
   zBuildEnvironment.__exit__reqsc           	      C   s   t  }t  }|rct| drt| jnt }|D ]K}t|}|jdur+|jddis+q||j	}|s9|
| qt|jtrI|j	 d|j }n	|j	 d|j }|jj|jddsb|
||f q||fS )	zReturn 2 sets:
        - conflicting requirements: set of (installed, wanted) reqs tuples
        - missing requirements: set of reqs
        rU   Nextrar$   z==z===T)prereleases)setrA   r   rU   r   r   markerevaluateget_distributionrJ   add
isinstanceversionr   	specifiercontains)	r,   rz   missingconflictingenvreq_strreqdistinstalled_req_strr   r   r    check_requirements   s,   
z#BuildEnvironment.check_requirementsfinderr   requirementsprefix_as_stringrF   c                C   s<   | j | }|jr
J d|_|sd S | jt ||||d d S )NT)rF   )rS   r&   _install_requirementsr<   )r,   r   r   r   rF   r%   r   r   r    install_requirements   s   


z%BuildEnvironment.install_requirementspip_runnabler%   c                C   s  t j| dddd|jddddd	|jpt g}t tjkr"|	d
 nt t
kr-|	d dD ]}t|j|}|d|dd dt|pGdhf q/|j}|rl|d|d g |dd  D ]	}	|d|	g qan|	d |jD ]	}
|d|
g qt|jr|d|jg |jD ]	}|d|g q|jr|d|jg |jr|	d |jr|	d |	d || td| }t|d| |d W d    d S 1 sw   Y  d S ) Ninstallz--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz--disable-pip-version-checkz--targetr$   z--certz-vvz-v)	no_binaryonly_binaryz--_-,z:none:z-ir      z--extra-index-urlz
--no-indexz--find-linksz--proxyz--trusted-hostz--client-certz--prez--prefer-binaryzInstalling zpip subprocess to install )command_descspinner)sys
executabler#   Zcustom_certr   loggergetEffectiveLevelloggingDEBUGrY   r   getattrformat_controlrZ   replacerH   sorted
index_urls
find_linksproxytrusted_hostsclient_certallow_all_prereleasesprefer_binaryr   r   )r   r   r   r%   rF   argsr   formatsr   extra_indexlinkhostr   r   r   r    r      sj   









"z&BuildEnvironment._install_requirementsr   N)r/   r0   r1   __doc__r.   rq   r   r
   BaseExceptionr   ry   r   r2   r	   r   r   r   staticmethodr"   r   r   r   r   r    rE   Q   sV    

6


"
rE   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 r   r   r,   r   r   r    r.   *     zNoOpBuildEnvironment.__init__c                 C   r   r   r   r   r   r   r    rq   -  r   zNoOpBuildEnvironment.__enter__rr   rs   rt   c                 C   r   r   r   )r,   rr   rs   rt   r   r   r    ry   0  s   zNoOpBuildEnvironment.__exit__c                 C   r   r   r   r   r   r   r    cleanup8  r   zNoOpBuildEnvironment.cleanupr   r   r   r   rF   c                C   s   t  r   )NotImplementedError)r,   r   r   r   rF   r   r   r    r   ;  s   z)NoOpBuildEnvironment.install_requirementsr   )r/   r0   r1   r   r.   rq   r   r
   r   r   ry   r   r   r2   r   r   r   r   r    r   '  s2    




r   )9r   r   r9   r3   rB   r   r`   collectionsr   typesr   typingr   r   r   r   r   r	   r
   r   pip._vendor.certifir   Zpip._vendor.packaging.versionr   pipr   r5   pip._internal.cli.spinnersr   pip._internal.locationsr   r   r   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   	getLoggerr/   r   r2   r!   r"   r<   rD   rE   r   r   r   r   r    <module>   s<    (
*	 W