𝗣𝗼𝗿 𝗾𝘂𝗲 𝗮𝗽𝗹𝗶𝗰𝗮𝘁𝗶𝘃𝗼𝘀 𝗣𝘆𝘁𝗵𝗼𝗻 𝗶𝗻𝗱𝗲𝗽𝗲𝗻𝗱𝗲𝗻𝘁𝗲𝘀 𝘀ã𝗼 𝗱𝗶𝗳í𝗰𝗶𝗲𝗶𝘀 𝗱𝗲 𝗰𝗼𝗻𝘀𝘁𝗿𝘂𝗶𝗿

Você passa semanas construindo uma ferramenta Python útil. Ela funciona perfeitamente na sua máquina. Você tenta compartilhá-la com um colega de equipe. Ela falha porque ele não tem o Python instalado.

Esta é uma dificuldade comum. Empacotar o Python em um único arquivo que funcione em qualquer lugar é difícil. Não se trata apenas de um arquivo de requisitos ausente.

O problema começa com a forma como o Python funciona.

O Python é uma linguagem dinâmica. Ele toma muitas decisões enquanto o programa está sendo executado. Ele pode importar bibliotecas em tempo de execução. Ele pode alterar a forma como as funções funcionam enquanto elas são executadas.

Linguagens compiladas como Go ou Rust decidem tudo antes de o programa começar. Elas removem o código não utilizado para criar arquivos pequenos e rápidos.

O Python não consegue fazer isso. Você não consegue prever facilmente quais partes do runtime seu código precisará. Para garantir que funcione, você deve incluir todo o runtime do Python.

Isso leva ao problema das bibliotecas.

Em outras linguagens, os compiladores usam tree-shaking para manter os arquivos pequenos. O Python não pode usar isso. Você deve incluir cada dependência e cada subdependência. Você também deve incluir arquivos binários compilados. Isso faz com que seu pequeno script se transforme em um pacote de 300MB.

Você tem três opções principais:

  • Exigir o Python na máquina de destino. Isso funciona para desenvolvedores, mas falha para usuários comuns.
  • Agrupar o interpretador. Ferramentas como PyInstaller ou Nuitka empacotam o runtime no seu aplicativo. O PyInstaller é popular. O Nuitka converte seu código para C para melhorar a velocidade.
  • Usar Docker. Isso oferece total confiabilidade ao incluir toda a camada do sistema operacional. Funciona bem para servidores, mas cria arquivos grandes.

Novas ferramentas como o PyApp oferecem um meio-termo. Elas usam um pequeno launcher para baixar a versão correta do Python para você.

Como escolher:

• Para equipes técnicas: Use um ambiente virtual e um arquivo de requisitos. • Para não desenvolvedores: Use o PyInstaller. É o método mais testado. • Para servidores e pipelines de dados: Use Docker. Aqui, a confiabilidade importa mais do que o tamanho do arquivo. • Para aplicativos desktop onde a velocidade importa: Use o Nuitka.

O Python não mudará sua natureza fundamental para resolver isso. A linguagem permanece dinâmica. Devemos contar com ferramentas melhores para preencher essa lacuna.

Fonte: https://dev.to/azadarjoe/why-standalone-python-apps-are-so-hard-to-build-3g31