26.2 The py2exe Tool
The
distutils
help you package up your Python extensions and applications. However, an end
user
can install the resulting packaged form only after installing Python. This is particularly a problem on Windows, where end users want to run a single installer to get an application working on their machine. Installing Python first and then running your application's installer may
prove
too much of a hassle for such end users.
Thomas Heller has developed a simple solution, a
distutils
add-on named
py2exe
,
freely
available for download from http://starship.python.net/crew/theller/py2exe/. This URL also contains detailed documentation of
py2exe
, and I recommend that you study that documentation if you intend to use
py2exe
in advanced ways. However, the simplest kinds of use, which I cover in the rest of this section, cover most practical needs.
After downloading and installing
py2exe
(on a Windows machine where Microsoft Visual C++ 6 is also installed), you just need to add the line:
import py2exe
at the start of your
otherwise
normal
distutils
script
setup.py
. Now, in addition to other
distutils
commands, you have one more option. Running:
python setup.py py2exe
builds and collects in a subdirectory of your distribution root directory an
.exe
file and one or more
.dll
files. If your distribution's
name
metadata is, for example,
myapp
, then the directory into which the
.exe
and
.dll
files are collected is named
dist\myapp
\
. Any files specified by option
data_files
in your
setup.py
script are placed in subdirectories of
dist\myapp
\
. The
.exe
file corresponds to your application's first or single entry in the
scripts
keyword argument value, and also contains the bytecode-compiled form of all Python modules and packages that your
setup.py
specifies or implies. Among the
.dll
files is, at minimum, the Python dynamic load library, for example
python22.dll
if you use Python 2.2, plus any other
.pyd
or
.dll
files that your application needs, excluding
.dll
files that
py2exe
knows
are system files (i.e.,
guaranteed
to be available on any Windows installation).
py2exe
provides no direct means to collect the contents of the
dist\myapp\
directory for easy distribution and installation. You have several options,
ranging
from a
.zip
file (which may be given an
.exe
extension and made self-extracting, in ways that vary depending on the .
zip
file handling tools you choose), all the way to a professional Windows installer construction system, such as those sold by companies such as Wise and InstallShield. One option that is particularly worth considering is Inno Setup, a free, professional-quality installer construction system (see http://www.jrsoftware.org/isinfo.php). Since the files to be packaged up for end user installation are an
.exe
file, one or more
.dll
files, and perhaps some data files in subdirectories, the issue becomes totally independent from Python. You may package up and redistribute such files just as if they had originally been built from sources written in any other programming language.
|