On 17 May 2000, Thomas Heller said:
I'm currently thinking about a bdist_winexe command for distutils. (Is there a better name?)
How about "bdist_wininst"?
This command will create a single executable file similar to those created with Wise or Installshield installers (except that you don't need to have these _commercial_ programs installed).
There is some sort of informal arrangement that lets Python developers use Wise to create installers of free Python extensions for free. I think the same arrangement lets Guido create Python installers for free. So we probably shouldn't toss Wise out the window just because it's commercial; it might be a good (and zero-cost, if not entirely free) option for Python-on-Windows developers.
This exe-File consists of a C-program embedding python, appended is a zip-compatible archive of the modules to distribute, the setup.py script, as well as an ini-file "setup.ini" or something like that which contains the distribution meta-data in a format easily readable by the C-program.
Whether you want to embed Python really depends on your audience. Let's face it, installing Python on Windows is not that hard. If a programmer wants to use some collection of modules, it's not too bad to say, "Download and install Python, then download and install the module distribution". Painless * 2 is not too bad.
For end-user applications, though, embedding a Python interpreter (and however much of the standard library as is needed) is probably the right thing to do. I think it should be up to the module developer/packager to decide he distributes a "Python-less" installer or a big fat one (or both).
Now, if you *do* end up writing your own installer GUI (instead of using Wise), how much of it can be written in Python rather than C? I assume doing this would require the presence of the Win32 extensions, so "painless * 2" might become "painless * 3". Hmmm... I'd be reluctant to make someone install Python *and* the Win32 stuff just to run an installer.
This exe-File, when run, simply unpacks the archive into a temporary directory, displays a nice GUI, runs the setup.py script, and cleans up the temp-dir.
I think the mode of operation should be as close to the other bdist commands as possible: distribute a pseudo-installation tree and just copy it in place. That is, the setup script shouldn't enter into it here, *unless* you need it to extract package meta-data. (Unless that's put into another file when you run "bdist_wininst".)