Skip to main content

Transforma uma pasta de projeto Python em executavel Windows portatil e instalador 64-bit.

Project description

GenPyEXE

Transforme uma pasta de projeto Python num executável Windows com instalador.

Você aponta para a pasta. O GenPyEXE descobre o arquivo inicial, as dependências e os recursos, converte a sua imagem em ícone, grava os metadados do Windows, compila num ambiente isolado e entrega dois artefatos: um .exe portátil e um instalador 64 bits que registra o aplicativo no Windows.

import genpyexeks

resultado = genpyexeks.build(
    "C:/projetos/MeuApp",
    app_name="Meu App",
    version="1.0.0",
    publisher="Seu Nome",
    icon="assets/logo.png",
    installer=True,
)

print(resultado.exe_path)        # dist/Meu App.exe
print(resultado.installer_path)  # dist/meu-app-1.0.0-setup-x64.exe

Índice


Por que existe

Empacotar um projeto Python para Windows costuma virar um ritual manual: descobrir os --hidden-import, lembrar de copiar a pasta assets/, gerar o .ico em sete resoluções, escrever o VERSIONINFO na mão e — se quiser que o aplicativo apareça em Aplicativos e Recursos — aprender a sintaxe do Inno Setup.

O GenPyEXE faz esse caminho inteiro uma vez e o deixa repetível.


Instalação

pip install genpyexe          # núcleo: API + CLI
pip install "genpyexe[gui]"   # com o assistente gráfico

Ou baixe os binários prontos em Releases: um executável portátil e um instalador 64 bits, sem precisar de Python instalado.

Instala como genpyexe, importa como genpyexeks. Nome de distribuição diferente do nome de importação é comum em Python (pillowPIL, beautifulsoup4bs4). O nome de instalação acompanha o produto; o pacote importável mantém genpyexeks.

O pip normaliza o nome antes de procurá-lo (PEP 503), então genpyexe e GenPyEXE levam ao mesmo pacote.

Para a versão em desenvolvimento, direto do repositório:

pip install "git+https://github.com/DaviKdS/GenPyEXE.git"

Confira o ambiente antes do primeiro build:

genpyexe doctor

Três formas de usar

1. Assistente gráfico

genpyexe gui

Quatro etapas: arraste a pasta, confira o que foi detectado, marque as integrações desejadas e acompanhe o log ao vivo.

┌─ GenPyEXE ─────────────────────────────────────────┐
│ 1. Projeto  2. Aplicativo  3. Instalador  4. Build │
├────────────────────────────────────────────────────┤
│   ╔══════════════════════════════════════════╗     │
│   ║     Arraste a pasta do projeto aqui      ║     │
│   ║        ou use o botão Procurar           ║     │
│   ╚══════════════════════════════════════════╝     │
│                                                    │
│   Detectado automaticamente                        │
│     Arquivo inicial: main.py                       │
│     Dependências:    3 - PySide6, pandas, requests │
│     Recursos:        assets/, templates/           │
│     Tipo de app:     gráfico (sem console)         │
└────────────────────────────────────────────────────┘

2. Linha de comando

genpyexe build ./MeuProjeto \
    --name "Meu App" \
    --version 1.0.0 \
    --publisher "Seu Nome" \
    --icon assets/logo.png \
    --onefile --windowed \
    --installer --desktop-shortcut --start-menu

3. Biblioteca Python

import genpyexeks
from genpyexeks import InstallerOptions

genpyexeks.build(
    "./MeuApp",
    app_name="Meu App",
    installer=InstallerOptions(
        desktop_shortcut=True,
        start_menu=True,
        add_to_path=False,
        file_associations=[".meuext"],
        run_at_startup=False,
        per_user_install=True,
    ),
)

O que o instalador faz

Cada item é opcional e independente — marque só o que o seu aplicativo precisa.

Opção Efeito no Windows
(sempre) Entrada em Aplicativos e Recursos, com desinstalador
desktop_shortcut Oferece atalho na Área de Trabalho
start_menu Entrada no Menu Iniciar + atalho de desinstalação
per_user_install Instala sem pedir senha de administrador (sem UAC)
add_to_path Acrescenta a pasta ao PATH — e a remove ao desinstalar
file_associations Duplo clique em .suaext abre o seu aplicativo
run_at_startup Inicia junto com o Windows
launch_after_install Executa ao terminar a instalação
keep_data_on_uninstall Preserva logs e configurações na desinstalação

O instalador usa um AppId determinístico derivado de publicador + nome do app. Na prática: instalar a versão 2.0 substitui a 1.0 em Aplicativos e Recursos, em vez de criar uma segunda entrada duplicada.


Suporte a bibliotecas

O PyInstaller já cobre a maior parte do ecossistema através dos seus hooks e do pyinstaller-hooks-contrib. O GenPyEXE acrescenta uma camada de receitas para os casos em que a coleta automática costuma deixar arquivos para trás:

  • Interfaces gráficas — PySide6, PyQt5/6, CustomTkinter, tkinterdnd2, ttkbootstrap, Kivy, pygame, Flet
  • Documentos — python-docx, reportlab, fpdf2, pdfplumber, PyMuPDF, openpyxl
  • Dados e IA — pandas, numpy, scipy, scikit-learn, PyTorch, transformers, EasyOCR
  • Web — Flask, FastAPI, Uvicorn, Selenium, Playwright
  • Sistema — pywin32, comtypes, pyautogui, SQLAlchemy

Bibliotecas fora dessa lista seguem o comportamento padrão do PyInstaller — a ausência de receita nunca quebra um build.

Quando um pacote depende de algo que nenhuma opção de empacotamento resolve — o binário do Tesseract, os navegadores do Playwright, modelos baixados na primeira execução — o GenPyEXE emite um aviso explícito em vez de gerar um executável que falharia na máquina do usuário final.


Ambiente isolado

Por padrão, o GenPyEXE cria uma venv contendo apenas as dependências declaradas do projeto e roda o PyInstaller lá dentro.

O motivo é concreto: um ambiente Python de uso geral acumula bibliotecas pesadas. Numa máquina com torch, opencv e easyocr instalados, o site-packages passa de 1,6 GB — e qualquer erro para mais na análise estática custa centenas de megabytes no executável final.

O ambiente é cacheado pelo hash das dependências, então o segundo build é rápido.

genpyexe build ./MeuApp                   # isolado (padrão)
genpyexe build ./MeuApp --no-isolation    # interpretador atual: rápido, offline, exe maior
genpyexe clean                            # remove as venvs em cache

Use --no-isolation quando estiver sem internet ou quando o projeto usar bibliotecas que só existem localmente.


Perfil do projeto

Grave as escolhas em genpyexe.toml e reconstrua com um comando:

genpyexe init ./MeuApp     # cria o perfil interativamente
genpyexe build ./MeuApp    # lê o perfil automaticamente
[app]
name = "Meu App"
version = "1.0.0"
publisher = "Seu Nome"
icon = "assets/logo.png"
entrypoint = "main.py"

[build]
mode = "onefile"       # onefile | onedir
console = "windowed"   # windowed | console
isolated = true

[installer]
enabled = true
desktop_shortcut = true
start_menu = true
per_user_install = true
add_to_path = false
file_associations = [".meuext"]

Referência da API

genpyexeks.build(
    project_dir,              # pasta do projeto
    app_name=None,            # padrão: nome da pasta
    version="1.0.0",
    publisher="",
    description="",
    copyright="",             # derivado do publisher, se vazio
    url="",
    icon=None,                # .ico, .png, .jpg, .bmp, .webp
    auto_icon=False,          # gera ícone com as iniciais
    entrypoint=None,          # detectado se omitido
    onefile=True,
    windowed=True,
    isolated=True,
    base_python=None,
    installer=False,          # True ou InstallerOptions(...)
    output_dir=None,
    hidden_imports=None,
    extra_data=None,          # [(origem, destino), ...]
    collect_all=None,
    excludes=None,
    uac_admin=False,
    clean=False,
    on_progress=None,         # callback(etapa, mensagem, percentual)
    on_output=None,           # callback(linha)
) -> BuildResult

BuildResult traz exe_path, installer_path, iss_path, spec_path, icon_path, notices_path, exe_size_mb, duration_seconds, warnings e messages.

Analisar sem construir:

info = genpyexeks.analyze("./MeuApp")
print(info.entrypoint_rel, info.requirements, info.suggests_windowed)

Referência da CLI

genpyexe doctor                 Diagnostica Python, PyInstaller e Inno Setup
genpyexe init <pasta>           Cria o perfil genpyexe.toml interativamente
genpyexe build <pasta>          Gera o executável (e o instalador)
genpyexe icon <imagem>          Converte uma imagem em .ico multi-resolução
genpyexe icon -g "Meu App"      Gera um ícone com as iniciais
genpyexe clean                  Remove as venvs de build em cache
genpyexe gui                    Abre o assistente gráfico

genpyexe build --help lista todas as opções.


Documentação completa

Documento Conteúdo
docs/instalacao.md Instalação, Inno Setup, requisitos
docs/uso-gui.md Assistente gráfico, etapa por etapa
docs/uso-cli.md Todos os comandos e opções
docs/api.md Referência da biblioteca
docs/instalador-windows.md Como cada opção age no Windows
docs/receitas-bibliotecas.md Bibliotecas cobertas e limitações
docs/solucao-de-problemas.md Erros comuns e como resolver

Requisitos

  • Windows de 64 bits (o alvo dos artefatos é o Windows)
  • Python 3.9 ou superior, 64 bits
  • Inno Setup 6 — apenas para compilar o instalador. Sem ele, o .exe portátil é gerado normalmente e o script .iss fica pronto, junto de um guia de compilação.

O GenPyEXE nunca instala nada automaticamente. Quando falta uma ferramenta, ele informa o comando exato e a decisão fica com você.


Segurança e privacidade

  • Nenhuma credencial, token ou dado pessoal no código. Variáveis opcionais documentadas em .env.example.
  • Todo subprocesso é executado com lista de argumentos e shell=False — sem interpolação de string em linha de comando.
  • A análise do projeto usa apenas a AST: o seu código nunca é importado nem executado durante a detecção.
  • Os logs registram caminhos e versões, nunca conteúdo de arquivos ou variáveis de ambiente.

Sobre o SmartScreen: executáveis não assinados disparam um aviso do Windows na primeira execução. Isso é comportamento normal do sistema, não um defeito do GenPyEXE, e só desaparece com um certificado de assinatura de código. O GenPyEXE suporta signtool opcionalmente, mas o certificado é seu e nunca deve ir para o repositório.


Licença e autoria

MIT — veja LICENSE.

Copyright © 2026 Davi Kasmirski dos Santos — autor e único detentor dos direitos autorais deste projeto.

O GenPyEXE gera automaticamente um arquivo THIRD_PARTY_NOTICES.txt ao lado do executável, com as licenças das bibliotecas empacotadas. Isso cumpre as cláusulas de atribuição dessas licenças e não divide a autoria do seu aplicativo nem deste projeto.

Ferramentas de terceiros utilizadas — nenhuma redistribuída aqui:

  • PyInstaller (GPLv2 com exceção de bootloader) — invocado como programa externo. A exceção autoriza expressamente distribuir sob qualquer licença os executáveis gerados por ele.
  • Inno Setup (JR Software) — gratuito inclusive para uso comercial. O GenPyEXE gera o script .iss e chama o compilador ISCC.exe.
  • Pillow, Jinja2, Typer, Rich, PySide6 — dependências declaradas em pyproject.toml, cada uma sob a própria licença.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

genpyexe-1.0.1.tar.gz (93.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

genpyexe-1.0.1-py3-none-any.whl (92.2 kB view details)

Uploaded Python 3

File details

Details for the file genpyexe-1.0.1.tar.gz.

File metadata

  • Download URL: genpyexe-1.0.1.tar.gz
  • Upload date:
  • Size: 93.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for genpyexe-1.0.1.tar.gz
Algorithm Hash digest
SHA256 40977da84a30978175bcecd1f582152a7d9709b4e4d525b84b191e5d8fec9fcb
MD5 5b08e84882324619b013e087fc52bd54
BLAKE2b-256 98a8fd6a184ef12241553cca16b915e992c630b7bf83e88ab95769bcf2371345

See more details on using hashes here.

Provenance

The following attestation bundles were made for genpyexe-1.0.1.tar.gz:

Publisher: release.yml on DaviKdS/GenPyEXE

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file genpyexe-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: genpyexe-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 92.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for genpyexe-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 af637c6bdd952c78dd78ffe5f50f17d8c7ccab983c2f28e4dfb5aef036c34842
MD5 f2b73c6008c3dd89c7367a2f2ccf8e86
BLAKE2b-256 f1fabaabd93885048b454a7417bdc307df13801ec033d989ace613193f4efa23

See more details on using hashes here.

Provenance

The following attestation bundles were made for genpyexe-1.0.1-py3-none-any.whl:

Publisher: release.yml on DaviKdS/GenPyEXE

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page