Código

Criando um executável a partir de um programa Python

(Last Updated On: 12 de fevereiro de 2019)

Recentemente, andei trabalhando em um simples projeto em Python para cálculo de IMC. Meu código simplesmente pega o input de altura e peso do usuário e imprime o IMC com a fórmula Peso / Altura²:


peso = float(input('Digite seu peso (kg): '))
altura = float(input('Digite sua altura (m): '))
imc = peso / (altura * altura)

print('Seu IMC é {}'.format(imc))

O programa funciona bem, podemos até testar:


python imc.py
Digite seu peso: 90
Digite sua altura: 1.80
Seu IMC é 27.777777777777775

Certo! Gostei do resultado e resolvi mostrar para alguns amigos. O problema é que, como eles não são programadores, não tinham Python instalado na máquina deles.

E agora? Vou ter que pedir para eles instalarem o interpretador Python, ou uma IDE, apenas para rodar meu pequeno programa? Ou pior, será que eu mesmo vou ter que instalar no computador deles, já que eles não entendem muito disso?

Dando uma olhada no meu computador, percebi que tenho vários programas instalados que executam arquivos sem a necessidade de eu instalar um interpretador ou algo do tipo. Como eles fazem isso? E se a gente fizesse o mesmo?

O ideal seria se conseguíssemos transformar nosso arquivo

imc.py em um executável mais genérico (como é qualquer executável no Linux, ou os .exe no Windows), que pudesse rodar sem problemas. Felizmente, isso é até que bem simples!

Congelando nosso programa Python com o cx_Freeze

A ideia de transformar um programa.py em um executável comum não começou com a gente, como você deve imaginar.

Assim, hoje em dia já existem diversas ferramentas e scripts que podem fazer todo esse processo de conversão para gente, como o PyInstaller, o py2exe e o cx_Freeze.

Usaremos o cx_Freeze, por ser multi-plataforma e de simples usabilidade. O primeiro passo, como sempre, é instalar esse pacote Python. Para isso, usamos o pip, no terminal:

pip install cx_Freeze

Em sistemas baseados em UNIX, é possível que esse comando necessite de permissão sudo para funcionar

Instalado o pacote, com um simples comando no terminal podemos já criar nosso executável. O comando base é simplesmente cxfreeze, mas, como queremos organizar um pouco melhor, usaremos a flag --target-dir para indicar a pasta onde queremos que fique nossos arquivos:

cxfreeze imc.py --target-dir calculadora-imc

Depois de um longo output, a pasta calculadora-imc é criada. Dentro dela, temos a seguinte organização:

Arquivos dentro da pasta calculadora-imc

Os arquivos dentro da pasta lib e o libpython3.6m.so.1.0 são arquivos de biblioteca que contém os dados necessários para que o executável funcione. Por sua vez, o arquivo imc (no Windows se chamaria imc.exe) é o executável.

Podemos até testá-lo:

Executável da calculadora de IMC funcionando

Funciona bem, e sem precisar da instalação do Python!

É importante perceber que, como eu usei o cx_Freeze no Linux, esse executável só deve funcionar no Linux. Para criarmos um executável no Windows, o ideal seria rodar o cx_Freeze também no Windows.

Portabilizando nosso código para maior acesso

O Python, por diversas razões, é uma linguagem de programação incrível!
Entretanto, uma de suas características que, por vezes, pode acabar decepcionando alguns usuários, é de que um programa Python só vai funcionar se o computador tiver o interpretador do Python instalado.

Isso acaba se tornando um pouco chato em situações que queremos compartilhar nosso programa com não-programadores, que dificilmente terão o Python instalado (especialmente se utilizarem o Windows, já que o Python vem por padrão em muitas distribuições baseadas em Unix), ou até mesmo com pessoas que têm instalada apenas uma versão diferente da que trabalhamos em nosso código.

Por conta disso, vários scripts foram criados para converter um arquivo .py em um simples executável que poderia funcionar sem a instalação do Python. Hoje, abordamos o cx_Freeze, que é multiplataforma e bem simples de usar!

Gostou do post? Agora conseguiremos compartilhar nossos programas com muito menos problemas! Se quiser aprender mais sobre Python, dê uma olhada em nossos cursos na Alura que abordam essa poderosa linguagem!

FIQUE POR DENTRO

Desenvolvedor Python apaixonado por educação e segurança.
Explicit is better than implicit.
Twitter: @yanorestes
Email: yan.orestes@alura.com.br

Próximo ArtigoHipsters.tech: Conheça os melhores episódios