Manual
do
Maker
.
com
No artigo anterior vimos como criar uma biblioteca para importar em nosso script Python, utilizando Cython. É uma ótima opção para proteger código que não deva ser modificado, ainda que o código seja distribuido. Nesse artigo veremos outra utilização de Cython, usando-o agora para gerar binário a partir do script Python; não uma biblioteca, mas o programa principal.
Para isso, vamos utilizar o mesmo código do artigo anterior. Se não o leu, sugiro que o faça previamente, porque nele discorri sobre a razão de ter sido escrito assim. Agora vamos ver o efeito de sua execução como binário direto.
Fazer essa compilação é mais simples ainda do que gerar a biblioteca, então vamos direto ao processo. Primeiro, eis o código a ser utilizado:
#!/usr/bin/env python
from __future__ import print_function
import os
def homes():
'''Imprime os homes dos usuarios do sistema'''
print('usuarios no home: ', end=' ')
print(os.listdir('/home'))
def nome(myName):
'''Imprime um nome passado como parametro'''
print("Seu nome: {}".format(myName))
if __name__ == '__main__':
nome('djames')
O nome dado ao arquivo continua o mesmo do artigo anterior; dobitaobyte.pyx. Inicialmente o código foi escrito e testado como um script Python comum, por isso recomendo mais uma vez, leia o artigo anterior.
Para gerar o arquivo com extensão e código C, simplesmente executa-se algo como:
cython --embed dobitaobyte.pyx
Com isso, um arquivo com o código C é criado com o mesmo nome do arquivo original, com extensão .c.
Agora para compilar nosso programa, devemos utilizar o gcc com os seguintes parâmetros (supondo ainda que esteja utilizando o mesmo nome de arquivo que eu utilizei, dobitaobyte.c):
gcc -I /usr/include/python2.7 -o dobitaobyte dobitaobyte.c -lpython2.7 -lpthread -lm -lutil -ldl
Isso criará o binário com o nome passado na flag -o, cuja escolha foi dobitaobyte. O diretório então chamado bin conterá os arquivos da imagem a seguir, cuja imagem contém também a execução do programa. Repare que o programa agora é completamente inútil, uma vez que não é possível chamar suas funções, que foram criadas para o artigo anterior. Mas não importa, porque com o mesmo código conseguimos ver duas coisas importantes; o programa foi gerado e ao executá-lo, pudemos ver a execução da função nome que no artigo anterior não era executado por estarmos usando esse código como uma biblioteca. Legal?
Agora já temos uma referência para criar bibliotecas e uma referência para criar o programa em si. Espero que tenha gostado desses dois breves artigos e que possam lhe servir de inspiração!
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!
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.