This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Title: bdist_wininst installer with install script raises exception
Type: Stage: resolved
Components: Distutils Versions:
Status: closed Resolution: wont fix
Dependencies: Superseder:
Assigned To: eric.araujo Nosy List: Matt.Wilkie, dbn, eric.araujo, mhammond, tarek, theller, vstinner
Priority: normal Keywords: patch

Created on 2008-12-11 21:16 by theller, last changed 2022-04-11 14:56 by admin. This issue is now closed.

File name Uploaded Description Edit
wininst-compat.patch dbn, 2013-09-10 12:57 Run bdist_wininst install scripts in 2/3 compatibile environment review
wininst-compat-2.7.patch dbn, 2013-09-10 12:58 (2.7) Run bdist_wininst install scripts in 2/3 compatibile environment
wininst-10.0-compat.exe dbn, 2013-09-10 12:59 default/3.3 rebuilt wininst stub
wininst-9.0-compat-2.7.exe dbn, 2013-09-10 12:59 2.7 rebuilt wininst stub
Messages (8)
msg77631 - (view) Author: Thomas Heller (theller) * (Python committer) Date: 2008-12-11 21:16
Running a bdist_wininst installer that contains a install script, with
python 3, raises an exception. This is displayed in the gui:
ImportError: No module named __builtin__
*** run_installscript: internal error 0xFFFFFFFF ***

This is probably because the bdist_wininst installer stubs (in the
Lib/distutils/command subdirectory) have not been recompiled after
changing the sources.
msg112431 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2010-08-02 08:56
Can you still reproduce in 3.1 and 3.2?
msg153681 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2012-02-19 09:14
The crash message is the same as the one in #4918; it looks like bdist_wininst need better error reporting.
msg190439 - (view) Author: Matt Wilkie (Matt.Wilkie) Date: 2013-06-01 06:13
I confirm this is happening with 3.2.4 from an installer generated in 2.7.4 (64bit Win7, 32bit python):
msg197436 - (view) Author: Dan Nicholson (dbn) Date: 2013-09-10 12:57
It turns out this is pretty easy to fix by just changing the stub to import builtins or __builtin__ depending on the python install version. Attached are patches that fix this for both the default and 2.7 branches.

My test case is a pure python module with an install script. I've rebuilt the wininst stub for both default (3.3) with VS2010 Express and 2.7 with VS2008 Express. I then built installers and ran them in both directions: installer created with python-2.7 and installed into python-3.3, and an installer created with python-3.3 and installed into python-2.7. Both worked fine with no warnings.

I've attached the stubs I built in case they're helpful. wininst-10.0-compat.exe is the 32 bit stub for default/3.3. wininst-9.0-compat-2.7.exe is the 32 bit stub for 2.7.
msg197442 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2013-09-10 14:37
I think the exe files are specific to one Python version, so the version check would not be necessary.  I may be wrong though, as I’m not a windows dev or user, so I’m adding Mark to this issue.
msg197818 - (view) Author: Dan Nicholson (dbn) Date: 2013-09-15 19:27
Right, that's what makes this difficult. If the stub exe of the target python was used, then it wouldn't need to care about compatibility. However, what you're running is the stub of the build python. So, when I distribute a bdist_wininst exe, it's running the stub from my python on the user's machine. That introduces a few compatibility issues.

1. The exe needs the same CRT version installed on the target that it was built with. It would fail to run immediately in this case. This does make having the built python be newer than the target python a little difficult.

2. The exe loads the python dll on the target machine. This requires the python dll to have enough compatibility for the usage of the python API in the exe of the build version.

3. After loading the python dll, python code is run in the target python. This is the problem I'm trying to solve here. The python code is embedded in the exe of the installer, so the compatibility with the target python has to be considered at build time.

The situation you're describing where the wininst of the target is run could maybe be made to work, but it would be a larger project.
msg384826 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2021-01-11 12:52
The distutils bdist_wininst command has been removed in Python 3.10: see bpo-42802.
Date User Action Args
2022-04-11 14:56:42adminsetgithub: 48886
2021-01-11 12:52:11vstinnersetstatus: open -> closed

nosy: + vstinner
messages: + msg384826

resolution: wont fix
stage: test needed -> resolved
2013-09-15 19:27:34dbnsetmessages: + msg197818
2013-09-10 14:37:24eric.araujosetnosy: + mhammond
messages: + msg197442
2013-09-10 12:59:37dbnsetfiles: + wininst-9.0-compat-2.7.exe
2013-09-10 12:59:16dbnsetfiles: + wininst-10.0-compat.exe
2013-09-10 12:58:31dbnsetfiles: + wininst-compat-2.7.patch
2013-09-10 12:57:51dbnsetfiles: + wininst-compat.patch

nosy: + dbn
messages: + msg197436

keywords: + patch
2013-06-01 06:13:51Matt.Wilkiesetnosy: + Matt.Wilkie
messages: + msg190439
2012-02-19 09:14:17eric.araujosetassignee: tarek -> eric.araujo
stage: test needed
messages: + msg153681
versions: - Python 3.0
2010-08-02 08:56:53eric.araujosetnosy: + eric.araujo
messages: + msg112431
2009-02-06 01:29:17tareksetassignee: tarek
nosy: + tarek
2008-12-11 21:16:07thellercreate