summaryrefslogtreecommitdiffstats
path: root/Tools/freeze
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/freeze')
-rw-r--r--Tools/freeze/modulefinder.py49
1 files changed, 36 insertions, 13 deletions
diff --git a/Tools/freeze/modulefinder.py b/Tools/freeze/modulefinder.py
index 42cbbab..015708b 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)