# Install and register pythonxx_d.dll, pywintypesxx_d.dll and pythoncomxx_d.dll
#
# Assumes the _d files can be found in the same directory as this script
# or in the cwd.
import win32api
import _winreg
import sys
import shutil
import os
def usage_and_die(rc):
print
print "This script is designed to copy and register the Python debug"
print "binaries. It looks for pythonxx_d.dll, pythoncomxx_d.dll etc,"
print "and installs them to work correctly with Python debug builds."
print
print "You will generally find this script in the. zip file that"
print "included these _d files. Please run this script from"
print "that directory"
sys.exit(rc)
if win32api.__file__.find("_d") > 0:
print "This scripts appears to be running a DEBUG version of Python."
print "Please run it using a normal release build (python.exe)"
usage_and_die(1)
try:
import pythoncom
except ImportError, details:
print "Could not import the release version of pythoncom"
print "The error details are: %s" % (details,)
print "Please correct this error and rerun the script"
usage_and_die(2)
try:
import pywintypes
except ImportError, details:
print "Could not import the release version of pywintypes"
print "The error details are: %s" % (details,)
print "Please correct this error and rerun the script"
usage_and_die(2)
def _docopy(src, dest):
orig_src = src
if not os.path.isfile(src):
src = os.path.join( os.path.split(sys.argv[0])[0], src)
print "Can not find %s or %s to copy" % (os.path.abspath(orig_src), os.path.abspath(src))
return 0
try:
shutil.copy(src, dest)
print "Copied %s -> %s" % (src, dest)
return 1
except:
print "Error copying '%s' -> '%s'" % (src, dest)
print str(sys.exc_info[1])
usage_and_die(3)
def _doregister(mod_name, dll_name):
assert os.path.isfile(dll_name), "Shouldn't get here if the file doesn't exist!"
try:
key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "Software\\Python\\PythonCore\\%s\\Modules\\%s" % (sys.winver, mod_name))
except _winreg.error:
try:
key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "Software\\Python\\PythonCore\\%s\\Modules\\%s" % (sys.winver, mod_name))
except _winreg.error:
print "Could not find the existing '%s' module registered in the registry" % (mod_name,)
usage_and_die(4)
# Create the debug key.
sub_key = _winreg.CreateKey(key, "Debug")
_winreg.SetValue(sub_key, None, _winreg.REG_SZ, dll_name)
print "Registered '%s' in the registry" % (dll_name,)
def _domodule(mod_name, release_mod_filename):
path, fname = os.path.split(release_mod_filename)
base, ext = os.path.splitext(fname)
new_fname = base + "_d" + ext
if _docopy(new_fname, path):
_doregister( mod_name, os.path.abspath( os.path.join(path, new_fname) ) )
# First the main Python DLL.
path, fname = path, fname = os.path.split(win32api.GetModuleFileName(sys.dllhandle))
base, ext = os.path.splitext(fname)
_docopy(base + "_d" + ext, path)
# Then pythoncom and pywintypes.
_domodule("pythoncom", pythoncom.__file__)
_domodule("pywintypes", pywintypes.__file__)
print "System _d files were setup."
|