Você está na página 1de 7

Gerando um programa executvel

a partir de um mdulo Python


Wendel Melo (Departamento de Cincia da Computao UFRJ),
Notas de aula de Computao
!"#$%#&$!&
' lin(ua(em de pro(ramao )*t+on se(ue o modelo de interpretao, isto ,,
e-i(e a presena de um interpretador para a e-ecuo das instru.es contidas em um
pro(rama ou script/ 0sta e-i(ncia impossi1ilita a e-ecuo de pro(ramas )*t+on em
am1ientes onde um interpretador da lin(ua(em no este2a dispon34el/ )ara usu5rios
6inu-, essa 7uesto no c+e(a a ser um pro1lema uma 4e8 7ue as principais
distri1ui.es desse sistema operacional li4re 25 tra8em um interpretador )*t+on
instalado/ No uni4erso Windo9s, entretanto, o sistema operacional no conta com um
interpretador )*t+on 4indo de :;51rica<, o 7ue, a princ3pio, tra8 limita.es para a
disseminao dos nossos pro(ramas ;eitos nessa lin(ua(em/ Nesse te-to, ;aremos
passo=a=passo um pe7ueno e-emplo para (erar um pro(rama e-ecut54el a partir de
um m>dulo )*t+on para o am1iente Windo9s, usando o pacote p*&e-e/ ? pro(rama
e-ecut54el (erado de4er5, em princ3pio, ;uncionar em 7ual7uer am1iente Windo9s
7ue possua as principais 1i1liotecas compartil+adas instaladas (D66s)/
Instalando o pacote py2exe
? pacote p*&e-e , uma e-tenso dos c+amados utilit5rios de distri1uio da
lin(ua(em )*t+on (distutils) criada para a con4erso de m>dulos )*t+on em
pro(ramas e-ecut54eis Windo9s/ ?s pro(ramas e-ecut54eis (erados so constru3dos
para rodar de ;orma independente do interpretador )*t+on, o 7ue si(ni;ica 7ue podem
ser utili8ados em am1ientes onde o mesmo no este2a instalado/ Na pr5tica, o 7ue o
pacote ;a8 , :encai-otar< no pro(rama e-ecut54el m>dulos e ;un.es do interpretador
2untamente com seu script/ Desse modo, no se de4e esperar (an+o de desempen+o
ao rodar um pro(rama )*t+on como e-ecut54el independente/
@ite o;icialA +ttpA##999/p*&e-e/or(#
0ndereo para downloadA +ttpA##source;or(e/net#pro2ects#p*&e-e#
B preciso ter um pouco de ateno na +ora de 1ai-ar o pacote p*&e-e/ Coc de4e
1ai-ar uma 4erso compat34el com sua ar7uitetura (%& ou DE 1its) e com sua 4erso
do )*t+on/ )ortanto, 4oc no de4e 1ai-ar a 4erso 7ue aparece na capa do site se
esta no ;or ade7uada ao seu conte-to/ 0m muitos casos, pode ser necess5rio
na4e(ar na estrutura de ar7ui4os do site de do9nload para encontrar a 4erso
apropriada/ )ara isso, cli7ue, no linF GFilesG ou acesse
+ttpA##source;or(e/net#pro2ects#p*&e-e#;iles# , con;orme a ;i(ura a se(uirA
Cli7ue na pasta p*&e-e/ 0m se(uida, escol+a uma 4erso do pacote,
pre;erencialmente a mais recente/ No momento em 7ue este te-to ;oi escrito, tal
4erso era a $/D/HA
'(ora 4oc de4e escol+er a 4erso mais ade7uada para sua ar7uitetura e 4erso do
)*t+on instalada/ 0m1ora min+a m57uina se2a DE 1its, a min+a instalao )*t+on , de
%& 1its, 4erso &/I/ @endo assim, escol+erei a 4erso p*&e-e para essas
caracter3sticas (p*&e-e=$/D/H/9in32=p*2.7/e-e)/ @e 4oc no est5 se(uro se sua
instalao )*t+on , de %& ou de DE 1its, ento com HHJ de pro1a1ilidade a sua
instalao , de %& 1its (mais comum)/ Coc pode con;erir essa in;ormao ol+ando a
lin+a de ca1eal+o impressa pelo interpretador )*t+on no momento de sua e-ecuoA
'p>s o do9nload da 4erso ade7uada do pacote p*&e-e, e-ecute a instalao/
Criando nosso primeiro executvel
Camos criar nosso primeiro pro(rama e-ecut54el a partir do scriptA
Note 7ue optei por sal4ar o ar7ui4o em diret>rio lo(o a1ai-o do CAK (CAKaulaKalo/p*)/
Fi8 esta escol+a por7ue precisaremos utili8ar o prompt de comando mais adiante, e
para 7uem no possui e-perincia com essa ;erramenta, ser5 mais ;5cil de encontrar
o diret>rio onde o ar7ui4o ;oi sal4o/ 'consel+o tam1,m a no usar nen+um caracter
acentu54el ou espao em 1ranco no nome do ar7ui4o ou do diret>rio escol+ido/ Note
ainda 7ue usei a ;uno raw_input ao ;inal do script para 7ue o pro(rama se2a
o1ri(ado a esperar por uma entrada do usu5rio antes de ;inali8ar sua e-ecuo/ @em
esta lin+a, o pro(rama (erado poderia ;uncionar muito rapidamente, sem dar ao
usu5rio a possi1ilidade de 4=lo e-ecutar/
)recisamos a(ora escre4er outro script para a (erao do e-ecut54elA
@al4amos este script como setup/p*, na mesma pasta do nosso pro(rama alo/p*
from distutils.core import setup
import py2exe
setup(console=['alo.py'])
(CAKaula)A
'(ora temos 7ue rodar o script setup/p* passando=o como parLmetro para o
interpretador/ )ara isso, usaremos o 4el+o e 1om prompt de comando do Windo9s,
dispon34el em niciar MM )ro(ramas MM 'cess>rios MM )rompt de ComandoA
? primeiro passo , adicionar o diret>rio de instalao do )*t+on N 4ari54el )'OP do
sistema/ 0sta 4ari54el )'OP cont,m uma lista de diret>rios onde o sistema 1usca por
ar7ui4os/ @upondo 7ue sua instalao do )*t+on est5 no diret>rio CAK)*t+on&I, di(ite
o comando (sem espaos em 1ranco)A :)'OPQJ)'OPJRCAK)*t+on&IK< e pressione
0NO0RA
@e tudo ocorrer 1em, se 4oc solicitar o conteSdo da 4ari54el )'OP (con;orme ;eito na
;i(ura anterior), 4oc de4er5 4er o diret>rio de instalao do )*t+on ao ;inal da lista/ '
4anta(em de utili8ar o prompt de comando para manipular o )'OP , 7ue as altera.es
;eitas s> 4alero para essa seo do prompt/ 'ssim, se 4oc alterar o )'OP de ;orma
e7ui4ocada, poder5 simplesmente ;ec+ar a 2anela do prompt e recomear o processo
a1rindo uma no4a sem pre2u38os ao sistema/
)ara testar se tudo ocorreu 1em, pode=se c+amar o interpretador )*t+on pelo prompt
de comando simplesmente di(itando o comando :p*t+on</ )ara sair do interpretador,
pode=se utili8ar a ;uno e-it()A
Note 7ue o diret>rio corrente no prompt ,, no meu caso, CAKUsersK9endel/ Camos
mudar o diret>rio corrente para o diret>rio onde esto os nossos scripts ola/p* e
setup/p* (CAKaula) com o comando :cd CAKaula<A
Note 7ue o diret>rio corrente ;oi alterado com sucesso para CAKaula/ '(ora (eramos o
e-ecut54el com o comandoA :p*t+on setup/p* p*&e-e<A
'p>s entrar com o comando anterior, o script setup/p* de4e imprimir uma s,rie de
in;orma.es na tela e (erar o nosso 1endito pro(rama e-ecut54elA
@e tudo ocorrer 1em, sero criados dois no4os diret>rios dentro do diret>rio aulaA
:1uild< e :dist</ ? diret>rio 1uild possui ar7ui4os utili8ados no processo de construo
do pro(rama e-ecut54el, os 7uais no nos interessam muito/ ? diret>rio dist conter5 o
pro(rama e-ecut54el :alo/e-e</ @e dermos um duplo cli7ue so1re o mesmo, o
e-ecutaremos sem o uso do interpretador )*t+onA
)rontoT '(ora 4oc 25 sa1e como pode distri1uir seus pro(ramas )*t+on para os seus
ami(uin+os e impressionar a todos com suas +a1ilidades em pro(ramao/ B
importante mencionar 7ue os demais ar7ui4os na pasta dist tam1,m so importantes
para o correto ;uncionamento do pro(rama criado e de4em ser distri1u3dos 2unto com
o e-ecut54el/ 0nto, se 7uiser passar seu pro(rama para terceiros, o ideal , passar
todo o diret>rio dist (erado (pode ser em um ar7ui4o 8ip, ou al(o assim)/
? processo a7ui descrito tam1,m ;unciona com pro(ramas )*t+on 7ue utili8am
inter;ace (r5;ica com OFinter/ 'penas , recomend54el modi;icar o ar(umento da
;uno setup para 9indo9s ao in4,s de console no script setup/p*A
Uma s,rie de op.es podem ser utili8adas para a construo do e-ecut54el, incluindo
a de;inio de um 3cone para o pro(rama/ Coc pode encontrar mais in;orma.es no
site o;icial do pacote p*&e-e, na 9e1 e, , claro, na a2uda do pacote (importe o pacote
e c+ame a ;uno +elp(p*&e-e) )/
Resumo do processo
0is a7ui um resumo de todo o processo para a (erao do nosso e-ecut54elA
1. 0scre4er o pro(rama )*t+on 7ue ser5 usado para (erar o e-ecut54el/
2. 'sse(urar 7ue o pacote p*&e-e est5 corretamente instalado/
3. 0scre4er um script 7ue (uiar5 o processo de construo do e-ecut54el (no
nosso caso, ;oi o setup/p*)/
4. '1rir o prompt de comando e adicionar o diret>rio de instalao do )*t+on ao
)at+ do sistema/
5. Mudar o diret>rio corrente do prompt para o diret>rio onde esto sal4os o script
do pro(rama e o script de construo do e-ecut54el/
6. C+amar o interpretador )*t+on passando como ar(umento o nome do script de
construo do e-ecut54el e o comando p*&e-e/
from distutils.core import setup
import py2exe
setup(indos=['pro!rama"rafico.py'])

Você também pode gostar