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'])