Raspberry

Compilar programas escritos em Python com Cython

Gerar binário a partir do script Python | resolvendo nomes | iniciar programa no boot | Multithread no Raspberry | Compilar programas escritos em Python

O Python é uma linguagem interpretada. Isso significa que escrevemos o código em um script com extensão .py e então chamamos o interpretador para executá-lo. Ou ainda, podemos dar um bit de execução ao script e chamá-lo com ./seuScript.py em Linux. Mas uma coisa que muitas pessoas gostariam de fazer é compilar programas escritos em Python para não distribuir código ou para deixar a execução mais rápida. Bem, vou mostrar uma das técnicas utilizadas, que é gerar uma biblioteca para importar em outro script e assim uma parte do código que seja propriedade intelectual ou simplesmente para evitar mãos curiosas esteja protegida. E vamos fazer no Raspberry.

Instalando Cython

A primeira coisa a fazer é instalar o Cython. Para isso, execute a sequência de comandos abaixo em um terminal Linux:

Após instalado, já podemos começar o primeiro teste.

Criando o arquivo de setup

O arquivo de setup pode receber outros parâmetros, mas aqui vamos fazer um “hello world” apenas para mostrar como utilizar o Cython para compilar programas escritos em Python e gerar uma biblioteca a ser importada em outro script. Podemos gerar também binários stand alone, mas vamos devagar.

Crie um arquivo chamado setup.py e coloque o seguinte conteúdo:

Repare que o script de setup está apontando para um arquivo chamado dobitaobyte.pyx.

Criando o script Python a ser compilado

Agora podemos criar u script Python qualquer, importar bibliotecas etc. Para essa compilação de exemplo, chamei o script Python com o nome dobitaobyte.py, escrevi o código, testei, então renomeei o arquivo para dobitaobyte.pyx.

O conteúdo desse script ficou assim:

Escrevi desse jeito para poder explicar alguns detalhes importantes.

A primeira coisa a notar nesse script, de cima para baixo, é o from future import print_function. Como o script é Python2, foi necessário importar o print para se comportar como o do Python3.

Na função homes serão exibidos os homes existentes em /home.

Na função nome, imprimimos o nome do usuário passado como parâmetro de função. Daí a penúltima linha if name == ‘main‘: significa que se o script estiver sendo executado diretamente, ele deve chamar a função nome com o parâmetro ‘djames’. Se for importado dentro de outro script, ele não executa nada.

Compilar programas escritos em Python

Agora podemos compilar com o seguinte comando:

Assim, geraremos nossa biblioteca no mesmo diretório em que chamamos o compilador.

Compilar programas escritos em Python

Importando e testando a biblioteca

Agora podemos importar e testar a biblioteca. Aqui estou usando o bpython para fazer o teste in flow. Chamando a função help(dobitaobyte) (após importá-lo com import dobitaobyte) vemos as funções disponíveis em nossa biblioteca:

Compilar programas escritos em Python

A primeira dica foi essa. A segunda dica é…

Onde comprar Raspberry?

Como sempre, sugiro a compra do Raspberry com nosso parceiro CurtoCircuito, que tem além de Raspberry, diversos outros componentes importantes e úteis para makers, como uma gama incrível de sensores.

Em breve teremos mais artigos relacionados a Raspberry, prepare seu coração (e seu bolso, porque certamente quererá ter mais uma novidade).

Até a próxima!

One comment

Comments are closed.

%d blogueiros gostam disto: