Differences between revisions 123 and 127 (spanning 4 versions)
Revision 123 as of 2006-05-02 22:20:01
Size: 9357
Editor: blv-proxy-07
Comment: Add links to help those wishing to build a com server (exe or dll).
Revision 127 as of 2008-07-08 11:27:43
Size: 9587
Editor: localhost
Comment: converted to 1.6 markup
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
Latest version as of 2006-March-20 is 0.6.5
Line 4: Line 5:
Its home is here [http://www.py2exe.org/] and on Sourceforge [http://sourceforge.net/projects/py2exe/] Its home is here [[http://www.py2exe.org/]] and on Sourceforge [[http://sourceforge.net/projects/py2exe/]]

Releases can be downloaded from [[http://prdownloads.sourceforge.net/py2exe/]]
Line 20: Line 23:
|| *.pyd || 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 library.zip will be installed||
|| *.dll || some pyd probably has some DLL has dependencies, and here they come ||
|| *.pyd || 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 library.zip will be installed ||
|| *.dll || some pyd probably have some DLL dependencies, and here they come ||
Line 24: Line 27:
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 explicitely from one of your script. (see EncodingsAgain and EvenMoreEncodings).
Some other modules (eg [http://pyserial.sourceforge.net/ 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 [http://www.pygtk.org/ 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).
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 [[http://pyserial.sourceforge.net/|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 [[http://www.pygtk.org/|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).
Line 31: Line 34:
[http://prdownloads.sourceforge.net/py2exe/py2exe-0.5.0.win32-py2.3.exe py2exe0.5.0] is the release of py2exe 0.5
[http://groups.google.de/groups?dq=&hl=de&lr=&ie=UTF-8&oe=UTF-8&threadm=1ebr001fkuq85al2i8c26ejceu8qvedmdb%404ax.com&prev=/groups%3Fhl%3Dde%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26group%3Dcomp.lang.python announced] by Thomas Heller in January 2004
[[http://prdownloads.sourceforge.net/py2exe/py2exe-0.5.0.win32-py2.3.exe|py2exe0.5.0]] is the release of py2exe 0.5
[[http://groups.google.de/groups?dq=&hl=de&lr=&ie=UTF-8&oe=UTF-8&threadm=1ebr001fkuq85al2i8c26ejceu8qvedmdb%404ax.com&prev=/groups%3Fhl%3Dde%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26group%3Dcomp.lang.python|announced]] by Thomas Heller in January 2004
Line 34: Line 37:
As nearly usual in Open Source space, prerelases and beta are of the same quality as .02 releases from some commercial software developing companies - rather full functional, with small obstacles. 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.
Line 38: Line 41:
["py2exe and windows services"] - some gained knowledge [[py2exeAndWindowsServices]] - some gained knowledge
Line 43: Line 46:
 * ListOfOptions How to see the list of available options for your setup.py script
 * RunningSetup How to run the setup script once you've written it
 * ListOfOptions  How to see the list of available options for your setup.py script
 * RunningSetup  How to run the setup script once you've written it
Line 50: Line 53:
 * SubclassingPy2Exe  Customizing the build process
 * CustomIcons  How to get your own icons with Py2Exe 0.5
 * SubclassingPy2Exe Customizing the build process
 * CustomIcons How to get your own icons with Py2Exe 0.5
Line 56: Line 59:
 * ShippingEmbedded How to use py2exe to ship embedded Python modules
 * SingleFileExecutable with NSIS
 * ShippingEmbedded  How to use py2exe to ship embedded Python modules
 * SingleFileExecutable  with NSIS
Line 59: Line 62:
 * CustomDataInExe Add custom data in the executable?
 * HowToDetermineIfRunningFromExe - Simple functions to determine if you're in an .exe or .py
 * CustomDataInExe  Add custom data in the executable?
 * HowToDetermineIfRunningFromExe Simple functions to determine if you're in an .exe or .py
 * [[WhereAmI]] sometimes you need to now where your exe is within the filesystem
Line 62: Line 66:
 * Py2exeAndPyQt If you're getting `File "qt.pyc", line 7, in __load Import Error: No module named sip`, read this  * Py2exeAndPyQt  If you're getting `File "qt.pyc", line 7, in __load Import Error: No module named sip`, read this
Line 64: Line 68:
 * Py2exeAndwxPython If you're getting ''wxObjectPtr not found'', read this  * Py2exeAndwxPython  If you're getting ''wxObjectPtr not found'', read this
Line 66: Line 70:
 * ["Py2exeAndPyGTK"] A recipe for py2exe and PyGTK  * [[Py2exeAndPyGTK]] A recipe for py2exe and PyGTK
Line 68: Line 72:
 * ["PIL and py2exe"] If you're getting ''cannot identify image file'', read this  * [[py2exeAndPIL]] If you're getting ''cannot identify image file'', read this
Line 70: Line 74:
 * ["PIL and reportlab"] If you've read ["PIL and py2exe"] and still get ''cannot identify image file'', read this  * [[PILAndReportlab]] If you've read [[py2exeAndPIL]] and still get ''cannot identify image file'', read this
Line 74: Line 78:
 * ["Py2exeAndPyXML"] If you're getting ''File "xml\sax\saxexts.pyc", line 77, in make_parser; xml.sax._exceptions.SAX''''''Reader''''''Not''''''Available: No parsers found'', read this.  * [[Py2exeAndPyXML]] If you're getting ''File "xml\sax\saxexts.pyc", line 77, in make_parser; xml.sax._exceptions.SAX''''''Reader''''''Not''''''Available: No parsers found'', read this.
Line 76: Line 80:
 * Py2exeAndWin32com creating a win32com exe and/or dll com server
 * WinShell Using win32com.shell with py2exe 0.5
 * IncludingTypelibs Allowing use of makepy generated typelibs
 * Py2exeAndWin32com  Creating a win32com exe and/or dll com server
 * WinShell  Using win32com.shell with py2exe 0.5
 * IncludingTypelibs  Allowing use of makepy generated typelibs
Line 80: Line 84:
 * Py2exeAndCtypesComDllServer creating a ctypes.com dll com server
 * Py2exeAndCtypesComExeServer creating a ctypes.com exe com server
 * Py2exeAndCtypesComDllServer  Creating a ctypes.com dll com server
 * Py2exeAndCtypesComExeServer  Creating a ctypes.com exe com server
Line 83: Line 87:
 * BetterCompression Getting complete wxPython Programms down to around 4 Megabytes
 * SetupLanguage How to localize the language with [http://starship.python.net/crew/theller/py2exe/ py2exe] and [http://www.jrsoftware.org/isinfo.php InnoSetup]
 * QuickStartIcons How to add Startup-Links to the Quickstart-Bar & the Desktop using [http://www.jrsoftware.org/isinfo.php InnoSetup] together with Py2Exe
 * BetterCompression Getting complete wxPython Programs down to around 4 Megabytes
 * SetupLanguage How to localize the language with [[http://starship.python.net/crew/theller/py2exe/|py2exe]] and [[http://www.jrsoftware.org/isinfo.php|InnoSetup]]
 * QuickStartIcons How to add Startup-Links to the Quickstart-Bar & the Desktop using [[http://www.jrsoftware.org/isinfo.php|InnoSetup]] together with Py2Exe
Line 87: Line 91:
 * ConfigImportProblems Fixing problems with importing Bio.Config files from library.zip  * ConfigImportProblems  Fixing problems with importing Bio.Config files from library.zip
Line 91: Line 95:
 * PythonCardSetup Getting pythoncard to work by editing setup.py  * PythonCardSetup  Getting pythoncard to work by editing setup.py
Line 93: Line 97:
Quixote is a pythonivc toolkit for webpages 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.
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.
Line 96: Line 99:
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: ["Quixote & py2exe"] HAM20040602 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
Line 102: Line 105:
 * Py2exeEnvironment - information about the environment for the executable  * Py2exeEnvironment - Information about the environment for the executable
Line 104: Line 107:
 * Py2ExeSubprocessInteractions - getting subprocess module to work with py2exe.  * Py2ExeSubprocessInteractions - Getting subprocess module to work with py2exe.
Line 115: Line 118:
 * GuiApps with options 'windows' still open a console window for errors  * GuiApps  with options 'windows' still open a console window for errors

py2exe

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 http://www.py2exe.org/ and on Sourceforge http://sourceforge.net/projects/py2exe/

Releases can be downloaded from http://prdownloads.sourceforge.net/py2exe/

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?

myprog.exe

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

python??.dll

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

library.zip

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)

*.pyd

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 library.zip will be installed

*.dll

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

w9xpopen.exe

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 library.zip. 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

General

py2exe and PyQt

  • Py2exeAndPyQt If you're getting File "qt.pyc", line 7, in __load Import Error: No module named sip, read this

py2exe and wxPython

py2exe and PyGTK

py2exe and PIL

  • py2exeAndPIL If you're getting cannot identify image file, read this

py2exe and reportlab

py2exe and Python ADODB modules

  • ADODB package Modules named adodb_xxx (like adodb_mysql) are not added automatically, must be added explicitly

py2exe and PyXML

  • Py2exeAndPyXML If you're getting File "xml\sax\saxexts.pyc", line 77, in make_parser; xml.sax._exceptions.SAXReaderNotAvailable: No parsers found, read this.

py2exe and win32com

py2exe and ctypes.com

py2exe and Innosetup

py2exe and Biopython

py2exe and SciPy

  • ScipyImportProblems Using py2exe with scipy ends up with missing cephes and __cvs_version__ messages. Here is a fix.

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

  • MatPlotLib - Fixing and including configuration information for this plotting package.

py2exe and Tix

  • TixSetup - Including the Tix DLL and Tcl files to make Tix apps work.

the runtime enviroment

py2exe and subprocess

py2exe and logging module

  • LoggingModule - Getting the %(filename)s format string working in the python logging module.

py2exe and win32pipe

py2exe and Python Eggs

  • ExeWithEggs - A recipe for creating an .exe out of eggs

py2exe and NumPy

  • If you're getting No scipy-style subpackage 'xxx' found in c:\...\library.zip\numpy. Ignoring, try --skip-archive option.

Fixes

Thoughts


CategoryHomepage

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