Py2Exe is an additional command to DistUtils, that creates standalone distributions for Win32. Latest version as of 2006-March-20 is 0.6.5

Its home is here and on Sourceforge

Releases can be downloaded from

How does py2exe work and what are all those files?

Let's start from the needed results going back to how py2exe does its job.

Python is an interpreted language and as long as Microsoft will not ship a Python interpreter (and its accompanying class library) with every copy of its flagship operating systems products, there is no direct way to execute a Python script on a vanilla Microsoft OS machine. For most casual user of py2exe, that means that you must create an executable (.exe) file that when clicked on will just run the script. This is what py2exe does for you. After py2exe has done its magic, you should have a "dist" directory with all the files necessary to run your python script. No install necessary. Click and run. No DLL hell, nothing else to download.

But what are all those files?


The actual executable. You can select a custom icon by using some specific target options (see CustomIcons)


the python interpreter library. This is the brain of your executable

This is a standard zip file where all the pure source modules will be inserted (using the "zipfile" option, you can also select to put that file in a sub-directory and with a different name)


The pyd files are actually standard Windows DLL (I used the useful depends.exe to check things around). They are also standard modules for Python. A Python program can import those pyd. Some applications build pyd to provide accelerated features. Also they are necessary to provide support to native functions of the operating system (see also CTypes to never have to use SWIG again!). Those files also follow into the subdirectory where will be installed


some pyd probably have some DLL dependencies, and here they come


This is needed on Win9x platform.

To run your program needs all those files as a necessary condition. But it might happen that this is not a sufficient condition. For examples, as encodings are imported "by name". If you use a feature that requires encodings, you will need to put an option to include encodings unconditionally or to import it explicitly from one of your script. (see EncodingsAgain and EvenMoreEncodings). Some other modules (eg pyserial-pyparallel) also conditionally import modules for each platform. You can avoid the warning by putting the correct "ignores" options in py2exe. Last but not least, modules like pygtk seem to create a module reference on-the-fly and therefore the corresponding warnings also are harmless (see ExcludingDlls to learn how to correct that).

An important point to note: the main script (the one passed as an option to "windows" or "console" in your setup file) is not put with all the other files in the Instead it is byte-compiled (see OptimizedBytecode for some details on optimization) and inserted into a named resource in the executable shell. This technique also allows you to insert binary string in the final executable (very nice if you want to add a custom version tag) through the usage of the "other_resources" options for the target (see CustomDataInExe).

Learned things with py2exe 0.5

py2exe0.5.0 is the release of py2exe 0.5 announced by Thomas Heller in January 2004

As nearly usual in Open Source space, prereleases and beta are of the same quality as .02 releases from some commercial software developing companies - rather full functional, with small obstacles.

I had to "upgrade" also my knowledge about workarounds from py2exe 0.4

py2exeAndWindowsServices - some gained knowledge

Tips and Tricks


py2exe and PyQt

py2exe and wxPython

py2exe and PyGTK

py2exe and PIL

py2exe and reportlab

py2exe and Python ADODB modules

py2exe and PyXML

py2exe and win32com

py2exe and

py2exe and Innosetup

py2exe and Biopython

py2exe and SciPy

py2exe and PythonCard

py2exe and Quixote

Quixote is a pythonivc toolkit for web pages which allows one to execute ptl files using ihooks. You can distribute your web application with medusa or twisted and hence you can create a web application without IIS or Apache.

I like to distribute my application with py2exe but I can not make py2exe setup script to recognize that x.ptl is a valid python files. Any idea how to do this? - impossible: py2exeAndQuixote HAM20040602

py2exe and MatPlotLib

py2exe and Tix

the runtime enviroment

py2exe and subprocess

py2exe and logging module

py2exe and win32pipe

py2exe and Python Eggs

py2exe and NumPy




Py2Exe (last edited 2008-07-08 11:27:43 by localhost)