B ^ B]@sdZddlmZmZmZddlZddlZddlmZm Z ddl Z e j rPddl Z nddl Z e eZddZddZd d Zd d Zd dZddZddZddZddZddZddZddZddZedkredS) z[Implement https://www.python.org/dev/peps/pep-0514/ to discover interpreters - Windows only)absolute_importprint_functionunicode_literalsN) basicConfig getLoggerccs@d}x6yt||VWntk r.PYnX|d7}qWdS)Nr)winregEnumKeyOSError)keyatr T/opt/alt/python37/lib/python3.7/site-packages/virtualenv/discovery/windows/pep514.py enum_keyssrcCs*yt||dStk r$dSXdS)Nr)r QueryValueExr )r Z value_namer r r get_valuesrccsjxdtjddddftjddtjdftjddtjdfgD].\}}}}}xt|||||D] }|VqTWq4WdS)NHKEY_CURRENT_USERzSoftware\Pythonr@HKEY_LOCAL_MACHINE )rrrZKEY_WOW64_64KEYKEY_WOW64_32KEY process_set)hive hive_namer flags default_archspecr r rdiscover_pythons$s "rc cszy`t||dtj|B@}x8t|D],}|dkr2q$xt||||D] }|VqBWq$WWdQRXWntk rtYnXdS)NrZ PyLauncher)r OpenKeyExKEY_READrprocess_companyr )rrr rrroot_keycompanyrr r rr.src csLt||6}x.t|D]"}t|||||}|dk r|VqWWdQRXdS)N)rrr process_tag)rr"r!r company_keytagrr r rr :s r c Cst||l}t||||}|dk rt|\}}} t|||||} | dk rtt||||} | dk rt| \} } |||| | | fSWdQRXdS)N)rrload_version_dataload_arch_dataload_exe)rr"r$r%rtag_keyversionmajorminor_archZexe_dataexeargsr r rr#Bs r#c Csd|||}yt|d|}|~t|d}|dkrlt|d}|dkrZt|dntj|td}|dk rtj |rt|d}||fSt|d|WdQRXWdQRXWn&t k rtd|d d YnXdS) Nz{}/{}/{}z{}\InstallPathZExecutablePathz#no ExecutablePath or default for itz python.exeZExecutableArgumentsz could not load exe with value {}z{}/{}Z InstallPathmissing) formatrrrmsgospathjoinstrexistsr ) rr"r$r%key_pathZip_keyr/ipr0r r rr(Os"    (r(c CsZt|d}|dk rVd|||}yt|Stk rT}zt||Wdd}~XYnX|S)NZSysArchitecturez{}/{}/{}/SysArchitecture)rr2 parse_arch ValueErrorr3)rr"r%r)rarch_strr9Zsys_archr r rr'fs r'cCsVt|tjrtd|}|r2tdd|DSd|}ndt|}t |dS)Nz^(\d+)(?:\.(\d+))?(?:\.(\d+))?$css"|]}|dk rt|ndVqdS)N)rC).0ir r r sz parse_version..zinvalid format {}zversion is not string: {}) r>r?r@rArBtuplerFr2rGr<) version_strrBrHr r rrIs   rIcCstd||dS)Nz5PEP-514 violation in Windows Registry at {} error: {})LOGGERwarningr2)r5whatr r rr3sr3cCs>tg}xtD]}|t|qWtdt|dS)N )rrappendrGprintr6sorted) interpretersrr r r_runs  rY__main__)__doc__ __future__rrrr4rAloggingrrr?PY3r_winreg__name__rQrrrrr r#r(r'r;r&rIr3rYr r r rs0