0% acharam este documento útil (0 voto)
0 visualizações9 páginas

Executáveis Com Python

Este guia detalha o processo de compilação, empacotamento e exportação de executáveis em Python utilizando ferramentas como Nuitka, PyInstaller e Briefcase. Ele abrange desde a configuração do ambiente até a automação da compilação com GitHub Actions, incluindo exemplos práticos e dicas para resolver problemas comuns. O documento também apresenta uma estrutura de projeto recomendada e um checklist para garantir a qualidade e integridade do código antes da exportação dos binários.

Enviado por

Leonardo Jose
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
0 visualizações9 páginas

Executáveis Com Python

Este guia detalha o processo de compilação, empacotamento e exportação de executáveis em Python utilizando ferramentas como Nuitka, PyInstaller e Briefcase. Ele abrange desde a configuração do ambiente até a automação da compilação com GitHub Actions, incluindo exemplos práticos e dicas para resolver problemas comuns. O documento também apresenta uma estrutura de projeto recomendada e um checklist para garantir a qualidade e integridade do código antes da exportação dos binários.

Enviado por

Leonardo Jose
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Guia Definitivo: Compilação,

Empacotamento e Exportação de
Executáveis em Python (com Nuitka,
PyInstaller, uv, ruff, pyright e CI/CD)
Este guia cobre todo o processo de transformação de aplicações Python em binários
executáveis standalone (.exe no Windows, arquivos binários ELF no Linux, e arquivos .app /
executáveis no macOS).
1. Visão Geral das Ferramentas de Empacotamento
Ferramenta Mecanismo Proteção do Tamanho do Caso de Uso
de Código Binário Ideal
Funcionament
o

Nuitka Traduz Python Alta (Código Médio / Aplicações


para C/C++ e compilado Otimizado comerciais,
compila via para binário proteção de IP
GCC/Clang/MS nativo). e ganho de
VC. performance.

PyInstaller Empacota o Baixa Grande Prototipagem


interpretador + (Suscetível à rápida, scripts
Bytecode decompilação) utilitários e
(.pyc) + DLLs . automações
em um simples.
container
auto-extraível.

PyOxidizer Incorpora um Média-Alta Muito Leve / Integração


interpretador Rápido com
Python ecossistema
otimizado Rust e alta
compilado em velocidade de
Rust. boot.
Briefcase Empacota a Depende do Padrão do SO Apps Desktop
aplicação nos backend e Mobile
formatos multiplataform
nativos de a nativos.
distribuição de
cada sistema
(MSI,
AppImage,
DMG, APK).

2. Estrutura do Projeto (src-layout)


O uso do layout src/ é essencial durante a etapa de build para garantir que o compilador utilize
exatamente as bibliotecas e módulos declarados nas dependências, sem contaminar o build
com arquivos temporários locais.

Plaintext
meu_app_executavel/​
├── .github/​
│ └── workflows/​
│ └── build_release.yml # Pipeline CI/CD para gerar binários automaticamente​
├── build/ # Artefatos temporários de compilação (no .gitignore)​
├── dist/ # Executáveis binários finais gerados​
├── resources/ # Ícones, imagens, estilos e ativos estáticos​
│ └── app_icon.ico​
├── src/​
│ └── meu_app/​
│ ├── __init__.py​
│ ├── [Link] # Ponto de entrada da aplicação​
│ ├── core/​
│ │ ├── __init__.py​
│ │ └── [Link]​
│ └── ui/​
│ ├── __init__.py​
│ └── [Link]​
├── .gitignore​
├── [Link] # Configuração unificada (uv, ruff, pyright, nuitka)​
└── [Link]​
3. Configuração do Ambiente com uv e Qualidade do
Código
3.1. Inicialização do Projeto

Bash
# Inicializar o projeto com uv​
uv init meu_app_executavel --app​
cd meu_app_executavel​
uv venv​

# Ativar ambiente virtual​
# Linux/macOS:​
source .venv/bin/activate​
# Windows:​
.venv\Scripts\activate​

# Adicionar dependências da aplicação (ex: PySide6 para interface gráfica)​
uv add pyside6 requests pydantic​

# Adicionar ferramentas de desenvolvimento, compilação e qualidade​
uv add --dev nuitka ruff pyright pytest​

3.2. Configuração no [Link]

Ini, TOML
[project]​
name = "meu-app-executavel"​
version = "0.1.0"​
description = "Aplicação Desktop de Alta Performance Compilada Nativamente"​
readme = "[Link]"​
requires-python = ">=3.12"​
dependencies = [​
"pyside6>=6.7.0",​
"pydantic>=2.7.0",​
]​

[[Link]]​
line-length = 88​
target-version = "py312"​

[[Link]]​
select = ["E", "W", "F", "I", "B", "UP"]​

[[Link]]​
quote-style = "double"​

[[Link]]​
include = ["src"]​
pythonVersion = "3.12"​
typeCheckingMode = "standard"​

[[Link]]​
standalone = true​
onefile = true​
plugin-enable = ["pyside6"]​
output-dir = "dist"​

4. Compilação Profissional Nativa com Nuitka


O Nuitka traduz seu código Python diretamente para código C/C++ e o compila utilizando o
compilador da máquina (GCC, Clang ou MSVC). Isso melhora o tempo de execução e protege
totalmente a propriedade intelectual do código-fonte.
4.1. Exemplo do Ponto de Entrada (src/meu_app/[Link])

Python
import sys​
from [Link] import (​
QApplication,​
QLabel,​
QMainWindow,​
QVBoxLayout,​
QWidget,​
)​


class MainWindow(QMainWindow):​

def __init__(self) -> None:​
super().__init__()​
[Link]("Aplicação Compilada Nativa")​
[Link](400, 200)​

layout = QVBoxLayout()​
label = QLabel("Executável Nativo Gerado com Sucesso!", self)​
[Link](label)​

container = QWidget()​
[Link](layout)​
[Link](container)​


def run() -> None:​
app = QApplication([Link])​
window = MainWindow()​
[Link]()​
[Link]([Link]())​


if __name__ == "__main__":​
run()​

4.2. Comando de Build para Gerar Executável Único (--onefile)

Bash
uv run nuitka \​
--standalone \​
--onefile \​
--plugin-enable=pyside6 \​
--windows-icon-from-ico=resources/app_icon.ico \​
--windows-console-mode=disable \​
--include-data-dir=resources=resources \​
--output-dir=dist \​
--output-filename=MeuApp \​
src/meu_app/[Link]​

Explicação das Flags Críticas do Nuitka:

●​ --standalone: Coleta e inclui todas as DLLs e bibliotecas necessárias no pacote.


●​ --onefile: Empacota a aplicação inteira em um único executável binário auto-extraível.
●​ --windows-console-mode=disable: Remove a janela do terminal/prompt preta ao abrir
aplicativos com interface gráfica no Windows.
●​ --include-data-dir=origem=destino: Inclui diretórios de recursos e arquivos estáticos
(como ícones e imagens) diretamente no executável final.
5. Prototipagem Rápida com PyInstaller
Se precisar gerar um executável rápido sem ter um compilador C++ (GCC/MSVC) configurado
no sistema:

Bash
uv add --dev pyinstaller​

# Gerar o executável diretamente​
uv run pyinstaller \​
--noconfirm \​
--onedir \​
--windowed \​
--icon=resources/app_icon.ico \​
--name="MeuAppUtilitario" \​
--paths=src \​
src/meu_app/[Link]​

6. Solução de Problemas Frequentes


(Troubleshooting)
6.1. Gerenciamento de Caminhos e Ativos Estáticos (--onefile)

Quando um executável --onefile é executado, ele descompacta seus arquivos em um diretório


temporário do sistema. Para garantir que imagens, ícones e bancos de dados locais sejam
encontrados, utilize esta função de resolução de caminhos:
Python
import sys​
from pathlib import Path​


def get_resource_path(relative_path: str) -> Path:​
"""Obtém o caminho absoluto do recurso, compatível com Nuitka, PyInstaller e Modo Dev."""​
if hasattr(sys, "_MEIPASS"): # PyInstaller --onefile​
base_path = Path(sys._MEIPASS)​
elif hasattr(sys, "__compiled__"): # Nuitka​
base_path = Path([Link])​
else: # Modo Desenvolvimento local​
base_path = Path(__file__).[Link]​

return base_path / relative_path​

6.2. Módulos Ocultos (Hidden Imports)

Caso o executável feche imediatamente informando erro de ModuleNotFoundError:

Bash
# No Nuitka:​
--include-module=pydantic_core​

# No PyInstaller:​
--hidden-import=pydantic_core​

7. Automação de Compilação Multiplataforma (GitHub


Actions)
Workflow para compilar automaticamente os executáveis nativos de Windows, Linux e
macOS a cada criação de Tag/Release (.github/workflows/build_release.yml):
YAML
name: Build Multiplatform Executables​

on:​
push:​
tags:​
- 'v*'​

jobs:​
build:​
strategy:​
matrix:​
os: [windows-latest, ubuntu-latest, macos-latest]​
runs-on: ${{ [Link] }}​

steps:​
- uses: actions/checkout@v4​

- name: Instalar uv​
uses: astral-sh/setup-uv@v2​
with:​
enable-cache: true​

- name: Configurar Python​
uses: actions/setup-python@v5​
with:​
python-version: '3.12'​

- name: Instalar Compilador C++ e Dependências (Linux)​
if: [Link] == 'Linux'​
run: sudo apt-get update && sudo apt-get install -y build-essential patchelf​

- name: Sincronizar Dependências​
run: uv sync​

- name: Validação do Código (Lint e Tipos)​
run: |​
uv run ruff check .​
uv run ruff format --check .​
uv run pyright​

- name: Compilar com Nuitka​
run: |​
uv run nuitka \​
--standalone \​
--onefile \​
--output-dir=dist \​
--output-filename=MeuApp-${{ [Link] }} \​
src/meu_app/[Link]​

- name: Upload dos Binários como Artefato​
uses: actions/upload-artifact@v4​
with:​
name: executable-${{ [Link] }}​
path: dist/​

8. Check-list Diário para Exportação de Binários


Executáveis
1.​ Limpar artefatos de builds anteriores:​
Bash​
rm -rf build/ dist/ *.spec​

2.​ Validar qualidade e integridade do código:​


Bash​
uv run ruff check --fix .​
uv run ruff format .​
uv run pyright​

3.​ Testar execução local no interpretador:​


Bash​
uv run python src/meu_app/[Link]​

4.​ Executar a compilação nativa de produção:​


Bash​
uv run nuitka --standalone --onefile --output-dir=dist src/meu_app/[Link]​

5.​ Homologar o binário final: Teste o arquivo compilado gerado na pasta dist/ em um
ambiente sem Python instalado para confirmar a total portabilidade do executável.

Você também pode gostar