|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- # 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 os
- import shutil
- import sys
- import winreg
-
- import win32api
-
-
- 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 as 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 as 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.")
|