mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
Fix for bug #442374 - Modulefinder registry support broken
This commit is contained in:
parent
b479dc561c
commit
773c83be04
1 changed files with 36 additions and 13 deletions
|
@ -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)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue