• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Kratos

[Python] Setup para executável com ícone [py2exe]

5 mensagens neste tópico

:thumbsup:... !!

# 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],
    )

Este exemplo é demasiado desnecessário, por ser muito grande, mas fica de ajuda para a galera.. tudo que o py2exe oferece (.dll, .exe, COM services, etc..).

Eu mesmo ao compilar meus programas, uso um script mais simples, porem com o mesmo efeito... logo eu posto o mesmo !!

:biggrin: Kratos


Artigo na wiki em: http://wiki.portugal-a-programar.org/python:py2exe#exemplo_complexo_e_completo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa a pergunta, mas foste tu que escreveste esse script? Caso contrário deverias postar a fonte de onde o tiraste acho eu...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

acrfedito que nao tenha sido kratos,mas porem entretanto,eu queria saber o lance do icone,pois o icone é na janela ou na exe pq eu realmenrte nao consegui enteder :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

acrfedito que nao tenha sido kratos,mas porem entretanto,eu queria saber o lance do icone,pois o icone é na janela ou na exe pq eu realmenrte nao consegui enteder ;)

Não fui eu qeum codou isto e nem lembro a fonte... tmb não vem ao caso.

wpy,

Este Setup, é para compilar os scripts Python (meuPrograma.py), para Executáveis (meuPrograma.exe).

Isto se você tiver instalado na sua plataforma Win32 o pacote py2exe.

A parte do ícone, é aque você escolhe um ícone para o executável.

Para alterar o ícone da janela (Frame), é necessario uma imagem bitmap do tipo xbm (icone.xbm), ai você altera assim:

root.configure(bitmap="@/BITMAP.xbm")

Exemplo de um Bitmap:

BITMAP = """
#define im_width 32
#define im_height 32
static char im_bits[] = {
0xaf,0x6d,0xeb,0xd6,0x55,0xdb,0xb6,0x2f,
0xaf,0xaa,0x6a,0x6d,0x55,0x7b,0xd7,0x1b,
0xad,0xd6,0xb5,0xae,0xad,0x55,0x6f,0x05,
0xad,0xba,0xab,0xd6,0xaa,0xd5,0x5f,0x93,
0xad,0x76,0x7d,0x67,0x5a,0xd5,0xd7,0xa3,
0xad,0xbd,0xfe,0xea,0x5a,0xab,0x69,0xb3,
0xad,0x55,0xde,0xd8,0x2e,0x2b,0xb5,0x6a,
0x69,0x4b,0x3f,0xb4,0x9e,0x92,0xb5,0xed,
0xd5,0xca,0x9c,0xb4,0x5a,0xa1,0x2a,0x6d,
0xad,0x6c,0x5f,0xda,0x2c,0x91,0xbb,0xf6,
0xad,0xaa,0x96,0xaa,0x5a,0xca,0x9d,0xfe,
0x2c,0xa5,0x2a,0xd3,0x9a,0x8a,0x4f,0xfd,
0x2c,0x25,0x4a,0x6b,0x4d,0x45,0x9f,0xba,
0x1a,0xaa,0x7a,0xb5,0xaa,0x44,0x6b,0x5b,
0x1a,0x55,0xfd,0x5e,0x4e,0xa2,0x6b,0x59,
0x9a,0xa4,0xde,0x4a,0x4a,0xd2,0xf5,0xaa
};
"""

É mais/ou\menos isso..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

acrfedito que nao tenha sido kratos,mas porem entretanto,eu queria saber o lance do icone,pois o icone é na janela ou na exe pq eu realmenrte nao consegui enteder :D

Não fui eu qeum codou isto e nem lembro a fonte... tmb não vem ao caso.

wpy,

Este Setup, é para compilar os scripts Python (meuPrograma.py), para Executáveis (meuPrograma.exe).

Isto se você tiver instalado na sua plataforma Win32 o pacote py2exe.

A parte do ícone, é aque você escolhe um ícone para o executável.

Para alterar o ícone da janela (Frame), é necessario uma imagem bitmap do tipo xbm (icone.xbm), ai você altera assim:

root.configure(bitmap="@/BITMAP.xbm")

Exemplo de um Bitmap:

BITMAP = """
#define im_width 32
#define im_height 32
static char im_bits[] = {
0xaf,0x6d,0xeb,0xd6,0x55,0xdb,0xb6,0x2f,
0xaf,0xaa,0x6a,0x6d,0x55,0x7b,0xd7,0x1b,
0xad,0xd6,0xb5,0xae,0xad,0x55,0x6f,0x05,
0xad,0xba,0xab,0xd6,0xaa,0xd5,0x5f,0x93,
0xad,0x76,0x7d,0x67,0x5a,0xd5,0xd7,0xa3,
0xad,0xbd,0xfe,0xea,0x5a,0xab,0x69,0xb3,
0xad,0x55,0xde,0xd8,0x2e,0x2b,0xb5,0x6a,
0x69,0x4b,0x3f,0xb4,0x9e,0x92,0xb5,0xed,
0xd5,0xca,0x9c,0xb4,0x5a,0xa1,0x2a,0x6d,
0xad,0x6c,0x5f,0xda,0x2c,0x91,0xbb,0xf6,
0xad,0xaa,0x96,0xaa,0x5a,0xca,0x9d,0xfe,
0x2c,0xa5,0x2a,0xd3,0x9a,0x8a,0x4f,0xfd,
0x2c,0x25,0x4a,0x6b,0x4d,0x45,0x9f,0xba,
0x1a,0xaa,0x7a,0xb5,0xaa,0x44,0x6b,0x5b,
0x1a,0x55,0xfd,0x5e,0x4e,0xa2,0x6b,0x59,
0x9a,0xa4,0xde,0x4a,0x4a,0xd2,0xf5,0xaa
};
"""

É mais/ou\menos isso..

Olha eu de novo.. :P

Só corrigindo um erro meu.. para alterar o ícone da janela (Frame), basta fazer assim:

root.iconbitmap("icone.ico")

Simples !!!  :)

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora