[Python-Dev] Possible solution for PEP250 and bdist_wininst

Thomas Heller thomas.heller@ion-tof.com
Fri, 13 Jul 2001 17:34:25 +0200


I have a possible solution for this problem.

(I'll use the name INSTALLPATH for installation directory stored
in the registry under the key
HKEY_LOCAL_MACHINE\Software\Python\PythonCore\<version>\InstallPath).

The bdist_wininst installer at _install_ time sets the PYTHONHOME
environment variable to INSTALLPATH, then loads the python dll
and retrieves the 'extinstallpath' attribute from the sys module:

    wwsprintf(buffer, "PYTHONHOME=%s", INSTALLPATH);
    _putenv(buffer);
    Py_SetProgramName(modulename);
    Py_Initialize();
    pextinstallpath = PySys_GetObject("extinstallpath");
    Py_Finalize();

If this is successful, the (string contents of) pextinstallpath
is appended to INSTALLPATH, and that will be the directory where
the package will be installed. If unsuccessful, INSTALLPATH will
be used as before.

I'm unsure about the change to site.py, but this should work:

diff -c -r1.26 site.py
*** site.py     2001/03/23 17:53:49     1.26
--- site.py     2001/07/13 15:32:27
***************
*** 140,153 ****
                                   "python" + sys.version[:3],
                                   "site-packages"),
                          makepath(prefix, "lib", "site-python")]
-         elif os.sep == ':':
-             sitedirs = [makepath(prefix, "lib", "site-packages")]
          else:
!             sitedirs = [prefix]
          for sitedir in sitedirs:
              if os.path.isdir(sitedir):
                  addsitedir(sitedir)

  # Define new built-ins 'quit' and 'exit'.
  # These are simply strings that display a hint on how to exit.
  if os.sep == ':':
--- 140,154 ----
                                   "python" + sys.version[:3],
                                   "site-packages"),
                          makepath(prefix, "lib", "site-python")]
          else:
!             sitedirs = [prefix, os.path.join(prefix, "lib", "site-packages")]
          for sitedir in sitedirs:
              if os.path.isdir(sitedir):
                  addsitedir(sitedir)

+ if os.sep == '\\':
+     sys.extinstallpath = os.path.join(sys.prefix, "lib", "site-packages")
+
  # Define new built-ins 'quit' and 'exit'.
  # These are simply strings that display a hint on how to exit.
  if os.sep == ':':

If anyone cares, I can post the diffs for the bdist_wininst sources.

Thomas