[Python-Dev] [Python-3000] Python 2.6 and 3.0

"Martin v. Löwis" martin at v.loewis.de
Tue Feb 26 21:13:14 CET 2008

> My problem is still getting my head
> around various MSI issues at any level (eg, bdist_msi needs some tweaking to
> allow for different releases of the same "package" to be recognized as such,
> but I'm not sure what MSI concept I'm dealing with yet...)

Don't hesitate to ask here. Not sure what problem you are talking to 
specifically, but I guess you are asking for "upgrade codes"; there is
also upgrade codes and package codes.

Each package file should have its own unique *packageÜ code, mere 
rebuilding should generate a new one. msilib does that correctly.
A package code code can be installed at most once on a system.

Related packages for the same software should share a *product* code.
Rebuilding should not change the package code (but might in msilib;
I'd have to check). Again, installer enforces that a specific package
code can only be installed once on a system. Python assigns a
separate product code for each bug fix release. Product codes
are most useful for uninstallation, e.g. to uninstall Python 2.5.1,

   msiexec /x {31800004-6386-4999-a519-518f2d78d8f0}

Use separate product codes if you want to allow for simultaneous

Subsequent versions of the same product should share an *upgrade*
code. MSI will check the Upgrade table, to see whether a package
with the same upgrade code (but a different product code) is
already installed, and if so, whether the version range matches.
If the installed product is newer, it will refuse to install the
older one. If the installed product is older, it will perform
an "upgrade installation", which involves uninstalling the older
version (possibly on a file-by-file basis), and possibly
migrating the feature selections.

Python uses a single upgrade code (until 2.5.2, which introduces
a separate upgrade code for Win64). It then uses version ranges
to make 2.5.2 an upgrade of 2.5.1 and 2.5.0, but not of 2.4.2
(say), essentially causing only one bug fix release per 2.5.x
to be installed on the system, but allowing simultaneous
installation of 2.5 and 2.4 (say). With 2.5.2, simultaneous
installation of Win64 and Win32 releases on a single system becomes
possible - which also requires to assign separate product codes
to Win64, namely

    2.5.2, Win32: 6b976adf-8ae8-434e-b282-a06c7f624d2f
    2.5.2, Win64: 6b976adf-8ae8-434e-b282-a06c7f624d20

> WiX is an excellent inspiration though - if a WiX example can be found for
> something, it should be a significant help in implementing it via msilib.

The current challenge is merge modules: How can I merge the VC msm into
the Python MSI (including support for SxS).


More information about the Python-Dev mailing list