top of page

cx_Freeze, aquivos executáveis em Python

Atualizado: 25 de out.


O objetivo deste post é ajudá-lo (a) a deixar seus programas e sistemas com um ar profissional, rs, uma tela de um programa executável utilizando cx_Freeze e Python.



Trouxe dois exemplos, o primeiro é uma forma mais simples (a tela do cmd abre de fundo) e o segundo exemplo é um pouquinho mais complexo, mas simples também e o programa roda sem o cmd aparecer de fundo.



🔎 Script utilizado: Github


Com o código pronto e funcionando (teste antes) lembre-se que é preciso criar um interface gráfica para não ser apenas uma tela preta com códigos...

Neste exemplo, utilizei a biblioteca nativa do Python (não precisa instalar) chamada Tkinter.



Instalação do cx_freeze


Utilizando o VSCode abra o terminal e execute o script abaixo para instalar cx_freeze:


🚩 pip install cx_freeze


Para quem não sabe como abrir o terminal, clique no menu Terminal, e novo terminal e digite o script acima.



O nome do meu arquivo neste exemplo se chama: Descompactador.py, digite o comando abaixo ainda no terminal, substituindo pelo nome do seu arquivo


🚩 cxfreeze nomeseuarquivo.py --target-dir nomeseuarquivo-py


Aguarde o processamento (running build_exe), e ao finalizar, será criado na pasta de origem o nosso app (aplicativo) que estará o nosso arquivo executável dentro:



O arquivo demora alguns segundos para ser aberto pois depende da performance e objetivo do código, mas funciona em qualquer máquina mesmo sem ter Python instalado.






cx_freeze (app) sem tela preta (cmd) de fundo



Veja que quando abrimos o aplicativo do nosso programa no exemplo acima, a tela do cmd abre por atrás da tela do nosso programa, e isso não é nada legal esteticamente falando.


Agora vou exemplificar com outro código, mas poderia utilizar o mesmo, isso não interfere.


🔎 Script utilizado: Github


Para ocultar a janela do console ao criar um executável com cx_Freeze para garantir que a janela do console não apareça abra o arquivo no github (você pode copiar e colar em uma nova página no vscode ou qualquer outro interpretador)


🚩 Altere o nome da extensão do arquivo de .py para .pyw

A extensão .pyw no Windows oculta a janela do console ao executar o script.


Exemplo:






🚩 Crie um arquivo no vscode chamado: setup.py

Então, ficará assim:








dentro do arquivo setup.py:


Obs: Não esqueça de substituir gerarpdf.pyw pelo nome do seu arquivo.


import sys
from cx_Freeze import setup, Executable

# A base "Win32GUI" é usada para GUI e oculta a janela do console
base = None
if sys.platform == "win32":
    base = "Win32GUI"

executables = [Executable("gerarpdf.pyw", base=base)]

setup(
    name="GerarPDF",
    version="1.0",
    description="Aplicativo para converter arquivos Word para PDF",
    executables=executables
)


Abra o terminal no vscode e digite:


🚩 python setup.py build


Pressione enter e será criada uma pasta chamada build, dentro da pasta build exe.win-amd64-3.12.


Esse processo pode demorar um pouco devido a conversão do seu script em python para um arquivo executável .exe. Aguarde terminar.


Ao finalizar, vá ate a pasta no windows e lá estará o nosso programa e ao ser aberto pelo usuário, a tela preta do cmd não irá abrir atrás.


No final, ficará assim no vscode com nosso aquivo .exe executável dentro da pasta criada.




Melhorando a performance para abrir o app


Alguns apps que criei, abrem em segundos, mas tem um app em específico que utilizo para tratar planilhas em excel que estão demorando cerca de 40" para abrir a tela do app que crie e comecei a pesquisar na internet sobre otimização ao inicializar o aplicativo para melhorar o processo de empacotamento, além de mover processos mais pesados para uma thread separada para que a interface seja carregada mais rapidamente.


Na mesma pasta onde esta o meu arquivo principal, criaremos o arquivo setup.py ou editar o que já existe se você tiver já criado, para que possamos configurar o cx_Freeze para otimizar o tamanho do executável bem como excluir as bibliotecas desnecessárias (essa exclusão pode variar de script para script, por tanto, peça ajuda ao chat gpt caso não funcione da mesma maneira que estou colocando aqui).



Meu arquivo setup.py ficará com os ajustes abaixo:



bottom of page