grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026U Tñf=aã @sdZddlZddlZddlmZmZdddddd d d d d dg ZdhZdddddddddœdddddddddœddddddd ddœd!d!d"d"d#d$d%d&œd'd'd(d)d*d+d%d&œd,d,d-d-d.d+d%d&œd/œZd&Z ej   ¡dZ d0ej dd1…Zd2ej dd1…Zej ej¡Zej ej¡Zej ej¡Zej ej¡ZdadZd3d4„Zej�rVej eejƒ¡Zn ee  ¡ƒZej!d5k�r’e "¡ #d6¡�r’eej $eee¡ƒZd7ej%k�r¬eej%d7ƒZd8d9„Z&e'ed:dƒZ(ej!d5k�räd;d<„Z)e)eƒZe)e(ƒZ(djd>d?„Z*e*d@ƒZ+e+�r dAD]Z,dBee,dC<dDee,dE<�qdFdG„Z-dHdI„Z.dJdK„Z/dLdM„Z0dNdO„Z1dkdPdQ„Z2dRd„Z3dSdT„Z4dUdV„Z5dWdX„Z6dYdZ„Z7dld[d„Z8d\d„Z9d]d „Z:d^d „Z;e0ƒdd@fd_d „Zdbd„Z?dcd „Z@ddd „ZAdedf„ZBdgdh„ZCeDdik�reCƒdS)mz-Access to Python's configuration information.éN)ÚpardirÚrealpathÚget_config_h_filenameÚget_config_varÚget_config_varsÚget_makefile_filenameÚget_pathÚget_path_namesÚ get_pathsÚ get_platformÚget_python_versionÚget_scheme_namesÚparse_config_hZMACOSX_DEPLOYMENT_TARGETz/{installed_base}/lib64/python{py_version_short}z){platbase}/lib64/python{py_version_short}z1{base}/lib/python{py_version_short}/site-packagesz7{platbase}/lib64/python{py_version_short}/site-packagesz;{installed_base}/include/python{py_version_short}{abiflags}z?{installed_platbase}/include/python{py_version_short}{abiflags}z {base}/binz{base})ÚstdlibÚ platstdlibÚpurelibÚplatlibÚincludeÚ platincludeÚscriptsÚdataz{installed_base}/lib/pythonz{base}/lib/pythonz{installed_base}/include/pythonz{installed_base}/Libz {base}/Libz{base}/Lib/site-packagesz{installed_base}/Includez{base}/Scriptsz#{userbase}/Python{py_version_nodot}z1{userbase}/Python{py_version_nodot}/site-packagesz+{userbase}/Python{py_version_nodot}/Includez+{userbase}/Python{py_version_nodot}/Scriptsz {userbase})rrrrrrrz){userbase}/lib64/python{py_version_short}z5{userbase}/lib/python{py_version_short}/site-packagesz7{userbase}/lib64/python{py_version_short}/site-packagesz+{userbase}/include/python{py_version_short}z{userbase}/binz{userbase}/lib/pythonz#{userbase}/lib/python/site-packagesz{userbase}/include)Ú posix_prefixÚ posix_homeÚntZnt_userZ posix_userZosx_framework_userú%d.%déz%d%dcCs(z t|ƒWStk r"|YSXdS©N)rÚOSError)Úpath©rú./opt/alt/python38/lib64/python3.8/sysconfig.pyÚ_safe_realpathis r!r)z\pcbuild\win32z\pcbuild\amd64Z_PYTHON_PROJECT_BASEcCs,dD]"}tj tj |d|¡¡rdSqdS)N)ZSetupz Setup.localZModulesTF)ÚosrÚisfileÚjoin)ÚdÚfnrrr Ú_is_python_source_dir~sr'Ú_homecCs0|r,tj |¡ tj tj td¡¡¡r,tS|S)NZPCbuild)r"rÚnormcaseÚ startswithr$Ú_PREFIX)r%rrr Ú _fix_pcbuild‡s ÿr,FcCs|rtrttƒSttƒSr)Ú _sys_homer'Ú _PROJECT_BASE)Z check_homerrr Úis_python_build�sr/T)rrz{srcdir}/Includerz{projectbase}/.rc Csnz|jf|ŽWStk rhz|jftjŽWYStk rb}ztd|ƒd‚W5d}~XYnXYnXdS)Nz{%s})ÚformatÚKeyErrorr"ÚenvironÚAttributeError)ÚsZ local_varsÚvarrrr Ú _subst_varsœsr6cCs0| ¡}| ¡D]\}}||kr"q|||<qdSr)ÚkeysÚitems)Z target_dictZ other_dictZ target_keysÚkeyÚvaluerrr Ú _extend_dict¥s r;cCsbi}|dkri}t|tƒƒt| ¡D]4\}}tjdkrFtj |¡}tj t ||ƒ¡||<q(|S)N)Úposixr) r;rÚ_INSTALL_SCHEMESr8r"ÚnamerÚ expanduserÚnormpathr6)ÚschemeÚvarsÚresr9r:rrr Ú _expand_vars­s   rDcCstjdkrdStjS)Nr<r)r"r>rrrr Ú_get_default_schemeºs rEcCsztj dd¡}|r|Sdd„}tjdkrBtj d¡p6d}||dƒStjdkrptjrp|dd tjd tjdd …ƒS|dd ƒS) NÚPYTHONUSERBASEcWstj tjj|Ž¡Sr)r"rr?r$)Úargsrrr ÚjoinuserÈsz_getuserbase..joinuserrÚAPPDATAú~ÚPythonÚdarwinÚLibraryrrz.local)r"r2Úgetr>ÚsysÚplatformÚ _frameworkÚ version_info)Úenv_baserHÚbaserrr Ú _getuserbaseÃs   ÿrUc Cs`ddl}| d¡}| d¡}| d¡}|dkr2i}i}i}t|dd��}| ¡} W5QRX| D]¦} |  d¡s^|  ¡d krzq^| | ¡} | r^|  d d ¡\} } |  ¡} |  d d ¡}d |kr¾| || <q^z| t krÌt ‚t | ƒ} Wn$t k rú|  d d ¡|| <Yq^X| || <q^t |  ¡ƒ}d}t|ƒdk�r&t|ƒD�]ò}||}| |¡}| |¡}|�rv|�rv| ¡| ¡k�rp|n|} n|�r€|n|} | dk �r |  d ¡} d}| |k�r´t|| ƒ}nˆ| |k�rÄd}nx| tjk�rÜtj| }n`| |k�r0| d¡�r |dd…|k�r d }n$d| |k�rd}nt|d| ƒ}n d || <}|�r||  ¡d…}|d|  ¡…||}d |k�r~|||<nŒz|t k�rŽt ‚t |ƒ}Wn"t k �rº| ¡||<Yn X|||<| |¡| d¡�r|dd…|k�r|dd…}||k�r|||<n|||<| |¡�q,�q| ¡D]"\}} t| tƒ�r.|  ¡||<�q.| |¡|S)zÌParse a Makefile-style file. A dictionary containing name/value pairs is returned. If an optional dictionary is passed in as the second argument, it is used instead of a new dictionary. rNz"([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)z\$\(([A-Za-z][A-Za-z0-9_]*)\)z\${([A-Za-z][A-Za-z0-9_]*)}Úsurrogateescape)Úerrorsú#Úérz$$ú$)ZCFLAGSZLDFLAGSZCPPFLAGSTFZPY_é)ÚreÚcompileÚopenÚ readlinesr*ÚstripÚmatchÚgroupÚreplaceÚ _ALWAYS_STRÚ ValueErrorÚintÚlistr7ÚlenÚtupleÚsearchÚstartÚstrr"r2ÚendÚremover8Ú isinstanceÚupdate)ÚfilenamerBr]Z _variable_rxZ _findvar1_rxZ _findvar2_rxZdoneZnotdoneÚfÚlinesÚlineÚmÚnÚvZtmpvZ variablesZrenamed_variablesr>r:Zm1Zm2ÚfoundÚitemZafterÚkrrr Ú_parse_makefileÖs¢                     ÿ       ÿ     r|cCsdtrtj tptd¡Sttdƒr0dttj f}nd}ttj dƒrP|dtj j 7}tj t dƒ|d¡S)z Return the path of the Makefile.ZMakefileÚabiflagsz config-%s%sZconfigÚ _multiarchz-%sr) Ú _PYTHON_BUILDr"rr$r-r.ÚhasattrrOÚ_PY_VERSION_SHORTr}Úimplementationr~r)Zconfig_dir_namerrr rWs  c Cs(tj ddjtjtjttjddƒd�¡S)NZ_PYTHON_SYSCONFIGDATA_NAMEz+_sysconfigdata_{abi}_{platform}_{multiarch}r~rY)ZabirPZ multiarch) r"r2rNr0rOr}rPÚgetattrr‚rrrr Ú_get_sysconfigdata_nameds ýÿr„c CsÊddl}i}tƒ}zt||ƒWnJtk rj}z,d|}t|dƒrR|d|j}t|ƒ‚W5d}~XYnXtƒ}z"t|ƒ�}t||ƒW5QRXWnJtk rÞ}z,d|}t|dƒrÆ|d|j}t|ƒ‚W5d}~XYnXt rð|d|d<t ƒ}dt j k�r$ddl }| |¡} || _| t j|<d tƒtf} tt d ƒ�rF| d 7} tj| d d �tj | |d¡} t| ddd��(}| d¡| d¡|j||d�W5QRXtdddd��}| | ¡W5QRXdS)z;Generate the Python module containing build-time variables.rNz.invalid Python installation: unable to open %sÚstrerrorz (%s)ZLDSHAREDZ BLDSHAREDrLzbuild/lib.%s-%sZgettotalrefcountz-pydebugT)Úexist_okz.pyÚwÚutf8)ÚencodingzB# system configuration generated and used by the sysconfig module zbuild_time_vars = )Ústreamzpybuilddir.txt)Úpprintrr|rr€r…rr_rrr„rOrPÚtypesÚ ModuleTypeÚbuild_time_varsÚmodulesr r�r"Úmakedirsrr$Úwrite) r‹rBZmakefileÚeÚmsgZconfig_hrsr>rŒÚmoduleZ pybuilddirZdestfilerrr Ú_generate_posix_varsmsL          r•cCs0tƒ}t|tƒtƒdgdƒ}|j}| |¡dS)z7Initialize the module as appropriate for POSIX systems.rŽrN)r„Ú __import__ÚglobalsÚlocalsrŽrq)rBr>Z_temprŽrrr Ú _init_posix¬sr™cCsfddl}tdƒ|d<tdƒ|d<tdƒ|d<| ¡d|d <d |d <t|d <tj ttj ƒ¡|d <dS)z+Initialize the module as appropriate for NTrNrZLIBDESTrZ BINLIBDESTrZ INCLUDEPYÚ EXT_SUFFIXz.exeZEXEZVERSIONZBINDIR) Ú_imprÚextension_suffixesÚ_PY_VERSION_SHORT_NO_DOTr"rÚdirnamer!rOÚ executable)rBr›rrr Ú_init_non_posix´s   r c Cs®|dkr i}ddl}| d¡}| d¡}| ¡}|s6qª| |¡}|rŒ| dd¡\}}z|tkrbt‚t|ƒ}Wntk r€YnX|||<q(| |¡}|r(d|| d¡<q(|S)zÌParse a config.h-style file. A dictionary containing name/value pairs is returned. If an optional dictionary is passed in as the second argument, it is used instead of a new dictionary. Nrz"#define ([A-Z][A-Za-z0-9_]+) (.*) z&/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/ rZr)r]r^Úreadlinerbrcrerfrg) ÚfprBr]Z define_rxZundef_rxrurvrwrxrrr rÅs,      cCsBtr,tjdkr"tj tptd¡}q4tp(t}ntdƒ}tj |d¡S)zReturn the path of pyconfig.h.rZPCrz pyconfig.h)rr"r>rr$r-r.r)Zinc_dirrrr rçs   cCs tttƒƒS)z,Return a tuple containing the schemes names.)rjÚsortedr=rrrr r óscCstS)z*Return a tuple containing the paths names.)Ú _SCHEME_KEYSrrrr r øscCs|rt||ƒSt|SdS)z°Return a mapping containing an install scheme. ``scheme`` is the install scheme name. If not provided, it will return the default scheme for the current platform. N)rDr=)rArBÚexpandrrr r ýs cCst|||ƒ|S)z[Return a path corresponding to the scheme. ``scheme`` is the install scheme name. )r )r>rArBr¥rrr r scGsxtdk�rFiattd<ttd<ttd<ttd<ttd<ttd<ttd<ttd <ttd <ttd <zt j td <Wnt k rˆd td <YnXt j dkrœttƒt j dkr®ttƒt d¡}|dk rÈ|td<tƒtd<t dt¡}t j dk�rt�rt j tƒ¡}t j ||¡}nt j tƒ¡}t|ƒtd<t jdk�rFddl}| t¡|�rpg}|D]}| t |¡¡�qT|StSdS)anWith no arguments, return a dictionary of all configuration variables relevant for the current platform. On Unix, this means every variable defined in Python's installed Makefile; On Windows it's a much smaller set. With arguments, return a list of values that result from looking up each argument in the configuration variable dictionary. NÚprefixÚ exec_prefixZ py_versionZpy_version_shortZpy_version_nodotZinstalled_baserTZinstalled_platbaseZplatbaseZ projectbaser}rYrr<ršÚSOÚuserbaseÚsrcdirrLr)Ú _CONFIG_VARSr+Ú _EXEC_PREFIXÚ _PY_VERSIONr�r�Ú _BASE_PREFIXÚ_BASE_EXEC_PREFIXr.rOr}r3r"r>r r™rNrUrrržrr$r!rPÚ _osx_supportZcustomize_config_varsÚappend)rGr¨rªrTr°Zvalsr>rrr rsP          cCs*|dkrddl}| dtd¡tƒ |¡S)z“Return the value of a single variable using the dictionary returned by 'get_config_vars()'. Equivalent to get_config_vars().get(name) r¨rNz SO is deprecated, use EXT_SUFFIXr)ÚwarningsÚwarnÚDeprecationWarningrrN)r>r²rrr r^sc CsÎtjdkrFdtj ¡krdSdtj ¡kr.dSdtj ¡kr@dStjStjdksZttd ƒs`tjSd tjkrttjd St ¡\}}}}}| ¡  d d ¡}|  d d¡}|  d d¡}|dd…dkrÊd||fS|dd…dk�r,|ddk�rÀd}dt |dƒd|dd…f}dddœ}|d|tj 7}n”|dd…dk�rLd |||fS|dd!…d"k�rŽd"}ddl }|  d#¡}| |¡}|�rÀ| ¡}n2|dd!…d$k�rÀddl} |  tƒ|||¡\}}}d%|||fS)&aöReturn a string that identifies the current platform. This is used mainly to distinguish platform-specific build directories and platform-specific built distributions. Typically includes the OS name and version and the architecture (as supplied by 'os.uname()'), although the exact information included depends on the OS; on Linux, the kernel version isn't particularly important. Examples of returned values: linux-i586 linux-alpha (?) solaris-2.6-sun4u Windows will return one of: win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) win32 (all others - specifically, sys.platform is returned) For other non-POSIX platforms, currently just returns 'sys.platform'. rZamd64z win-amd64z(arm)z win-arm32z(arm64)z win-arm64r<ÚunameZ_PYTHON_HOST_PLATFORMú/rYú Ú_ú-NéZlinuxz%s-%sZsunosrÚ5Zsolarisz%d.%sr\rZ32bitZ64bit)iÿÿÿlÿÿÿÿz.%sZaixz%s-%s.%séÚcygwinz[\d.]+rLz%s-%s-%s)r"r>rOÚversionÚlowerrPr€r2rµrdrgÚmaxsizer]r^rbrcr°Zget_platform_osxr) ZosnameZhostÚreleaser¾ÚmachineZbitnessr]Zrel_rervr°rrr r jsT           þ cCstSr)r�rrrr r ºscCsFtt| ¡ƒƒD]0\}\}}|dkr0td|ƒtd||fƒqdS)Nrz%s: z %s = "%s")Ú enumerater£r8Úprint)ÚtitlerÚindexr9r:rrr Ú _print_dict¾s rÇcCsfdtjkrtƒdStdtƒƒtdtƒƒtdtƒƒtƒtdtƒƒtƒtdt ƒƒdS)z*Display all information sysconfig detains.z--generate-posix-varsNzPlatform: "%s"zPython version: "%s"z!Current installation scheme: "%s"ZPathsZ Variables) rOÚargvr•rÄr r rErÇr rrrrr Ú_mainÅs  rÉÚ__main__)F)N)N)EÚ__doc__r"rOZos.pathrrÚ__all__rer=r¤r¾Úsplitr­rRr�r�rr@r¦r+Ú base_prefixr®r§r¬Úbase_exec_prefixr¯r«Z _USER_BASEr!rŸržr.Úgetcwdr>r¿Úendswithr$r2r'rƒr-r,r/rrAr6r;rDrErUr|rr„r•r™r rrr r r rrrr r rÇrÉÚ__name__rrrr Úsþõÿö ø ø ù ù ùÌ?   ÿ           ? "  M P