o Ec&@sbdZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z ddlmZmZmZmZmZmZmZmZddlmZddlmZdd lmZdd lmZdd l m!Z!dd l"m#Z#m$Z$m%Z%dd l&m'Z'ddl(m)Z)ddl*m+Z+m,Z,erddl-m.Z.e/e0Z1GdddZ2ej3dee4fddZ5GdddZ6Gddde6Z7dS)z;Build Environment used for isolation during sdist building N) OrderedDict) get_paths) TracebackType) TYPE_CHECKINGIterableIteratorListOptionalSetTupleType)where) Requirement)Version)__file__) open_spinner) get_platlibget_prefixed_libs get_purelib)get_environment)call_subprocess) TempDirectory tempdir_kinds) PackageFinderc@seZdZdeddfddZdS)_PrefixpathreturnNcCs@||_d|_ttjdkrdnd||ddd|_t||_dS)NFntZ posix_prefix)baseZplatbase)varsZscripts)rsetuprosnamebin_dirrlib_dirs)selfrr&J/opt/alt/python310/lib/python3.10/site-packages/pip/_internal/build_env.py__init__"sz_Prefix.__init__)__name__ __module__ __qualname__strr(r&r&r&r'r!srrc csttj}|st|VdStddR}tj |j d}i}t j dkr-d|d<t j|dfi|}|d D]}||||jq=Wdn1sVwYtj |d VWddS1snwYdS) 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. Nzstandalone-pip)kindz__env_pip__.zip)FZstrict_timestampsw*pip)pathlibPath pip_locationresolveparentis_dirr,rr!rjoinsys version_infozipfileZZipFilerglobwrite relative_toas_posix)sourceZtmp_dirZpip_zipkwargsZzfchildr&r&r'_create_standalone_pip,s"   "rDc @seZdZdZdddZdddZdeeed eed ee ddfd d Z d e e de ee e e fee ffddZddde e de de ddf ddZede ddde e dede ddf ddZdS)BuildEnvironmentzACreates and manages an isolated environment to install build depsrNcsttjddtfdddD|_g|_g|_tt|j D]}|j |j |j |j q"ddttfD}tjjd|_tj|jsTt|jttj|jd d }|td j||jd WddS1sywYdS) NT)r-Zglobally_managedc3s(|]}|ttjj|fVqdSN)rr!rr9.0r"Ztemp_dirr&r' Ls  z,BuildEnvironment.__init__..)ZnormalZoverlaycSsh|]}tj|qSr&)r!rnormcase)rHsiter&r&r' Zs z,BuildEnvironment.__init__..rLzsitecustomize.pyr0a 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$)rrZ BUILD_ENVr _prefixes _bin_dirs _lib_dirsreversedlistvaluesappendr#extendr$rrr!rr9 _site_direxistsmkdiropenr>textwrapdedentformat)r%prefixrNfpr&rIr'r(Is0    "zBuildEnvironment.__init__cCsndddD|_|jdd}|jd}|r||tj|jg}tjtj |dtj |ddS)NcSsi|] }|tj|dqSrF)r!environgetrGr&r&r' sz.BuildEnvironment.__enter__..)PATHZPYTHONNOUSERSITEZ PYTHONPATHrc1) _save_envrPrVsplitr!pathseprWr`updater9)r%rZold_pathZ pythonpathr&r&r' __enter__~s   zBuildEnvironment.__enter__exc_typeexc_valexc_tbcCs:|jD]\}}|durtj|dq|tj|<qdSrF)reitemsr!r`pop)r%rjrkrlZvarname old_valuer&r&r'__exit__s  zBuildEnvironment.__exit__reqsc Cst}t}|rJt|j}|D]:}t|}||j}|s#||qt|jt r3|jd|j}n |jd|j}|j|j vrI|||fq||fS)zReturn 2 sets: - conflicting requirements: set of (installed, wanted) reqs tuples - missing requirements: set of reqs z==z===) setrrQrZget_distributionr"add isinstanceversionrZ specifier) r%rqZmissingZ conflictingenvZreq_strZreqZdistZinstalled_req_strr&r&r'check_requirementss"     z#BuildEnvironment.check_requirementsfinderr requirementsprefix_as_stringmessagecCs|j|}|jr Jd|_|sdSt$}tjdkr"tjt }n| t }| |||||WddS1ss<   (          E