Kaydet (Commit) 773c83be authored tarafından Mark Hammond's avatar Mark Hammond

Fix for bug #442374 - Modulefinder registry support broken

üst b479dc56
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment