From: Mark Hammond Date: Wed, 5 Sep 2001 23:42:36 +0000 (+0000) Subject: Fix for bug #442374 - Modulefinder registry support broken X-Git-Tag: v2.2a3~60 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=773c83be048ae66b7ed5329095d43e3321ac1780;p=python Fix for bug #442374 - Modulefinder registry support broken --- diff --git a/Tools/freeze/modulefinder.py b/Tools/freeze/modulefinder.py index 42cbbab038..015708be3b 100644 --- a/Tools/freeze/modulefinder.py +++ b/Tools/freeze/modulefinder.py @@ -47,6 +47,38 @@ class Module: s = s + ")" return s +_warned = 0 + +def _try_registry(name): + # Emulate the Registered Module support on Windows. + try: + import _winreg + RegQueryValue = _winreg.QueryValue + HKLM = _winreg.HKEY_LOCAL_MACHINE + exception = _winreg.error + except ImportError: + try: + import win32api + RegQueryValue = win32api.RegQueryValue + HKLM = 0x80000002 # HKEY_LOCAL_MACHINE + exception = win32api.error + except ImportError: + global _warned + if not _warned: + _warned = 1 + print "Warning: Neither _winreg nor win32api is available - modules" + print "listed in the registry will not be found" + return None + try: + pathname = RegQueryValue(HKLM, \ + r"Software\Python\PythonCore\%s\Modules\%s" % (sys.winver, name)) + fp = open(pathname, "rb") + except exception: + return None + else: + # XXX - To do - remove the hard code of C_EXTENSION. + stuff = "", "rb", imp.C_EXTENSION + return fp, pathname, stuff class ModuleFinder: @@ -332,20 +364,11 @@ class ModuleFinder: if name in sys.builtin_module_names: return (None, None, ("", "", imp.C_BUILTIN)) - # Emulate the Registered Module support on Windows. if sys.platform=="win32": - import _winreg - from _winreg import HKEY_LOCAL_MACHINE - try: - pathname = _winreg.QueryValueEx(HKEY_LOCAL_MACHINE, \ - "Software\\Python\\PythonCore\\%s\\Modules\\%s" % (sys.winver, name)) - fp = open(pathname, "rb") - # XXX - To do - remove the hard code of C_EXTENSION. - stuff = "", "rb", imp.C_EXTENSION - return fp, pathname, stuff - except _winreg.error: - pass - + result = _try_registry(name) + if result: + return result + path = self.path return imp.find_module(name, path)