o
    @i'                     @   sb  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rddl-m.Z. e/e0Z1G dd dZ2ej3dee4 f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dd ZdS )_Prefixc                 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)pathsetupr   osnamebin_dirr   lib_dirs)selfr!    r(   j/home/www/bk.finsightngr.online/finsigh_v2/venv200/lib/python3.10/site-packages/pip/_internal/build_env.py__init__#   s   z_Prefix.__init__N)__name__
__module____qualname__r*   r(   r(   r(   r)   r   !   s    r   returnc               	   c   s    t t j} |  st| V  dS tddR}tj	
|j	d}i }tjdkr-d|d< tj|dfi |}| d	D ]}|||| j  q=W d   n1 sVw   Y  tj	
|d
V  W d   dS 1 snw   Y  dS )zCreate 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_dirstrr   r#   r!   joinsysversion_infozipfileZipFilerglobwriterelative_toas_posix)sourcetmp_dirpip_zipkwargszfchildr(   r(   r)   _create_standalone_pip.   s"   

"rL   c                   @   sb   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	de
dddee
 dede
ddf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 q"dd t t fD }tj jd| _tj| jsTt| j ttj| jd	d
}|tdj|| jd W d    d S 1 syw   Y  d S )NT)r/   globally_managedc                 3   s(    | ]}|t tj j|fV  qd S N)r   r#   r!   r=   .0r$   temp_dirr(   r)   	<genexpr>R   s
    
z,BuildEnvironment.__init__.<locals>.<genexpr>)normaloverlayc                 S   s   h | ]}t j|qS r(   )r#   r!   normcase)rQ   siter(   r(   r)   	<setcomp>`   s    z,BuildEnvironment.__init__.<locals>.<setcomp>rX   zsitecustomize.pyr3   a  
                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openrC   textwrapdedentformat)r'   prefixrZ   fpr(   rR   r)   r*   L   s0   


"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>)PATHPYTHONNOUSERSITE
PYTHONPATHrp   1)
	_save_envr]   rc   splitr#   pathseprd   rm   updater=   )r'   r!   old_path
pythonpathr(   r(   r)   	__enter__   s   


zBuildEnvironment.__enter__c                 C   s:   | j  D ]\}}|d u rtj|d  q|tj|< qd S rO   )rt   itemsr#   rm   pop)r'   exc_typeexc_valexc_tbvarname	old_valuer(   r(   r)   __exit__   s
   zBuildEnvironment.__exit__c           	      C   s   t  }t  }|rJt| j}|D ]:}t|}||j}|s#|| qt|jt	r3|j d|j }n	|j d|j }|j|j
vrI|||f q||fS )zReturn 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'   reqsmissingconflictingenvreq_strreqdistinstalled_req_strr(   r(   r)   check_requirements   s"   

z#BuildEnvironment.check_requirementsc                 C   s   | j | }|jr
J d|_|sd S t $}tjdk r"tjt	}n|
t }| ||||| W d    d S 1 s<w   Y  d S )NT)r0      )r\   r"   
contextlib	ExitStackr>   r?   r#   r!   dirnamer8   enter_contextrL   _install_requirements)r'   finderrequirementsprefix_as_stringmessagerk   ctxpip_runnabler(   r(   r)   install_requirements   s"   



"z%BuildEnvironment.install_requirementsr   r   r   r   rk   r   r.   Nc                 C   sf  t j| dddd|jdg}t tjkr|d dD ]}t|j	|}|
d|d	d
 dt|p2dhf q|j}|rW|
d|d g |dd  D ]	}	|
d|	g qLn|d |jD ]	}
|
d|
g q_|jD ]	}|
d|g ql|jr~|d |jr|d |d |
| dt i}t|}t|||d W d    d S 1 sw   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_CERT)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   r   argsr   formatsr   extra_indexlinkhostr   r   r(   r(   r)   r      s@   	










"z&BuildEnvironment._install_requirements)r+   r,   r-   __doc__r*   rz   r   r   r   staticmethodr<   r   r   r   r(   r(   r(   r)   rM   H   s*    6rM   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      d S rO   r(   r'   r(   r(   r)   r*   	     zNoOpBuildEnvironment.__init__c                 C   r   rO   r(   r   r(   r(   r)   rz     r   zNoOpBuildEnvironment.__enter__c                 C   r   rO   r(   )r'   r}   r~   r   r(   r(   r)   r     s   zNoOpBuildEnvironment.__exit__c                 C   r   rO   r(   r   r(   r(   r)   cleanup  r   zNoOpBuildEnvironment.cleanupc                 C   s   t  rO   )NotImplementedError)r'   r   r   r   r   r(   r(   r)   r     s   z)NoOpBuildEnvironment.install_requirementsN)	r+   r,   r-   r   r*   rz   r   r   r   r(   r(   r(   r)   r     s    	r   )8r   r   r   r#   r6   r>   rh   r@   collectionsr   	sysconfigr   typesr   typingr   r   r   r   r	   r
   r   r   pip._vendor.certifir   Z"pip._vendor.packaging.requirementsr   Zpip._vendor.packaging.versionr   r5   r   r8   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<    (
 >