O módulo py2exe é uma extensão à biblioteca distutils, que converte scripts de Python, com extensão *.py em ficheiros executáveis no windows, os tradicionais *.exe.
Não, mas está disponível para download em: http://sourceforge.net/project/showfiles.php?group_id=15583
Em primeiro lugar, tem que se fazer o download e instalar o módulo (vem num exe, por isso é simples). De seguida, cria-se um script python que vai conter as instruções para tornar o script de interesse executável. Supondo como exemplo o ficheiro quadrado.py com a seguinte estrutura:
n1 = raw_input('Introduza um número\n') print n1**2 raw_input # Para que o programa não termine imediatamente
O que é necessário é então um script, chamado por exemplo setup.py, com a seguinte estrutura:
from distutils.core import setup # Importa-se só o que é necessário import py2exe setup(console=['quadrado.py'])
De seguida, basta aceder à linha de comandos (p.ex: win-R e digitar cmd), navegar até à directoria onde se encontrem ambos os ficheiros (quadrado.py e setup.py) e fazer: python setup.py py2exe. Muitas linhas de output depois, terão aparecido na pasta onde se encontra duas novas directorias: dist e build. A primeira, contém tudo o que é necessário à execução do quadrado.exe (que também lá se encontra), a segunda, pode-se apagar, porque contém apenas ficheiros temporários e necessários à "compilação" do script.
Está aqui um exemplo de tudo o que o py2exe oferece (.dll, .exe, COM services, etc..).
# A setup script showing advanced features. # # Note that for the NT service to build correctly, you need at least # win32all build 161, for the COM samples, you need build 163. # Requires wxPython, and Tim Golden's WMI module. # Note: WMI is probably NOT a good example for demonstrating how to # include a pywin32 typelib wrapper into the exe: wmi uses different # typelib versions on win2k and winXP. The resulting exe will only # run on the same windows version as the one used to build the exe. # So, the newest version of wmi.py doesn't use any typelib anymore. from distutils.core import setup import py2exe import sys if len(sys.argv) == 1: sys.argv.append("py2exe") sys.argv.append("-q") class Target: def __init__(self, **kw): self.__dict__.update(kw) # for the versioninfo resources self.version = "0.5.0" self.company_name = "Sem compania" self.copyright = "Sem copyright" self.name = "exemplo py2exe" ################################################################ # A program using wxPython # The manifest will be inserted as resource into meuSoftware_wx.exe. This # gives the controls the Windows XP appearance (if run on XP ;-) # # Another option would be to store it in a file named # meuSoftware_wx.exe.manifest, and copy it with the data_files option into # the dist-dir. manifest_template = ''' <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="5.0.0.0" processorArchitecture="x86" name="%(prog)s" type="win32" /> <description>%(prog)s Program</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly> ''' RT_MANIFEST = 24 test_wx = Target( # used for the versioninfo resource description = "A sample GUI app", # what to build script = "meuSoftware_wx.py", other_resources = [(RT_MANIFEST, 1, manifest_template % dict(prog="meuSoftware_wx"))], icon_resources = [(1, "icone.ico")], dest_base = "teste_wx") test_wx_console = Target( # used for the versioninfo resource description = "A sample GUI app with console", # what to build script = "meuSoftware_wx.py", other_resources = [(RT_MANIFEST, 1, manifest_template % dict(prog="meuSoftware_wx"))], dest_base = "test_wx_console") ################################################################ # A program using early bound COM, needs the typelibs option below test_wmi = Target( description = "Early bound COM client example", script = "test_wmi.py", ) ################################################################ # a NT service, modules is required myservice = Target( # used for the versioninfo resource description = "A sample Windows NT service", # what to build. For a service, the module name (not the # filename) must be specified! modules = ["MyService"] ) ################################################################ # a COM server (exe and dll), modules is required # # If you only want a dll or an exe, comment out one of the create_xxx # lines below. interp = Target( description = "Python Interpreter as COM server module", # what to build. For COM servers, the module name (not the # filename) must be specified! modules = ["win32com.servers.interp"], ## create_exe = False, ## create_dll = False, ) ################################################################ # COM pulls in a lot of stuff which we don't want or need. excludes = ["pywin", "pywin.debugger", "pywin.debugger.dbgcon", "pywin.dialogs", "pywin.dialogs.list"] setup( options = {"py2exe": {"typelibs": # typelib for WMI [('{565783C6-CB41-11D1-8B02-00600806D9B6}', 0, 1, 2)], # create a compressed zip archive "compressed": 1, "optimize": 2, "excludes": excludes}}, # The lib directory contains everything except the executables and the python dll. # Can include a subdirectory name. zipfile = "lib/shared.zip", service = [myservice], com_server = [interp], console = [test_wx_console, test_wmi], windows = [test_wx], )