[Tutorial] Construindo executaveis com Cx_Freeze

4,322 views
Skip to first unread message

Marc Dev

unread,
Sep 17, 2012, 4:11:47 PM9/17/12
to pug...@googlegroups.com

E Ai pessoal,

Devido a um post bem movimentado de Italo e a minha ausencia no encontro de python, venho aqui fazer um tutorial exemplo de como construir executaveis usando Cx_Freeze.

Vamos aprender sobre Cx_Freeze, um conjunto multi-plataforma de scripts criados para "congelar" os scripts Python em executáveis ​​de forma semelhante ao py2exe, PyInstaller, etc. Vamos congelar um script de console e um script com interface grafica (ou seja GUI). Se você não tiver o cx_freeze instalado ainda, você pode obter-lo 
aqui.


Na documentaçao do Cx_Freeze estao listadas três maneiras de construir executaveis.

  1. Usar o proprio cx_freeze para construir. Ex: cxfreeze mon_script.py --target-dir dirName

  2. Criar um script de instalação distutils (estilo py2exe), que você pode salvar para uso futuro

  3. Configurar cx_freeze internamente. *Nao cobrirei essa forma de construçao aqui nesse tutorial*

Agora paremos a conversa e vamos começar a codar, não é?



[MANEIRA 1]

Usando o proprio cx_freeze para construir o objeto é bem simples, uma linha de codigo no terminal e ta pronto. ;)
Primeiramente vou criar o mais simples dos scripts python, o famoso Hello World, aqui chamado Hello Cx_Freeze.

#!/usr/bin/env python
import sys
print "Hello Cx_Freeze"
sys.stdin.read(1)                       # Espera input do utilizator para evitar o fechamento do console em windows

Salve o script com o nome debut_console.py


Agora abrimos o terminal e acessamos o diretorio do script e lançamos o codigo: cxfreeze debut_console.py --target-dir exeDir

Um diretorio com o nome exeDir sera criado. acessamos o diretorio: cd exeDir e executamos: ./debut_console

O output sera:

Hello Cx_Freeze


Facil nao é? :D


[MANEIRA 2]

Aqui nos vamos codar um script com uma interface grafica, alem disso iremos codar um distutils script para a construçao personalizada do nosso objeto.
Primeiramente vamos fazer o script do programa o programa usa a biblioteca de widgets wx, obtenha ela 
aqui:


#!/usr/bin/env python
import wx
class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(400,300))
        self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)
        self.Show(True)
app = wx.App(False)
frame = MyFrame(None, 'Janela Exemplo')
app.MainLoop()
Salve o script com o nome debut.pyw
E vamos agora escrever nosso script distutils:
from cx_Freeze import setup, Executable
exe = Executable(
    script="debut.pyw",
    #base="Win32GUI",                           # Retirar comentario se for contruir um executavel para windows
    )
setup(
    name = "PugPeExemplo",
    version = "0.0.1",
    description = "Um Exemplo de Cx_Freeze",
    executables = [exe]
    )


Salve o script com o nome setup.py (Como indica o comentario no codigo acima se a plataforma a ser executada for Windows retire o comentario)

Entao no terminal ja no diretorio dos scripts, use o seguinte comando: python setup.py build 

Um diretorio chamado build sera criado, acessando o diretorio voce vera todos os arquivos incluido DLLs/Libs e o executavel.

Uma boa maneira de aprender as varias outras opções que podem ser usadas com Cx_Freeze é usar GUI2Exe para gerar os arquivos setup.py para nós. A documentação no site Cx_Freeze mostra as outras opções a classe Executable toma.


[Resumindo]

Como voces podem ver nao é tao complicado assim construir um executavel usando Cx_Freeze. 

Porém atençao, voce pode escrever o programa em qualquer plataforma, o grande problema so é na hora de usar bibliotecas, as DLLs do Windows nao existem em outros sistemas, o que impossibilita a construçao de um executavel para windows no linux por exemplo. Mesmo usando um ambiente python instalado no Wine pode gerar problemas. Para isso você deve construir o programa no windows lembrando de instalar python e as dependencias necessarias à execuçao do programa e so é começar os experimentos. :P

Se tiver algum problema ainda com cx_freeze deixa um post aqui que a gente conversa. :D


Abraço à todos,

Marc


PS: Uploadei os exemplos assim como o tutorial em PDF pra quem quiser ler offline. Desculpem-me às falhas de pontuaçao em algumas palavras do texto, o meu teclado nao suporta alguns caracteres do português.


[Downloads]

Exemplo1:  http://ubuntuone.com/1adzzxYaVNJ0u3KUo45Bny

Exemplo2:  http://ubuntuone.com/0BEAAoDZcEQ5r2ZmlbvfBw

Exemplo3:  http://ubuntuone.com/32y32jrRyU85uZtkg20y7u

TutorialPDF:  http://ubuntuone.com/68NMapBXeXHpOSXcUE9Rjp

Marcos Antonio Rufino do Egito

unread,
Sep 19, 2012, 7:54:44 AM9/19/12
to pug...@googlegroups.com
Muito bom mesmo Marcondes ...

--
Você está recebendo esta mensagem porque se inscreveu no grupo "pug-pe" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para pug...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para pug-pe+un...@googlegroups.com.
Para ver esta discussão na web, acesse https://groups.google.com/d/msg/pug-pe/-/JwOmoOt9puMJ.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 



--
Marcos Egito 
GNU/Linux User #491326   
blog maregito.tk            
Fotos www.flickr.com/photos/maregito
081-8762 - 4378 celular OI, 081-3456 - 9739 casa
mare...@gmail.com
Skype maregito, MSN mare...@oi.com.br, Gtalk mare...@gmail.com

"Sabedoria é não dizer nada, quando tudo que queremos é falar tudo, sabedoria é saber calar, para poder dizer mais com o silêncio!"
(Eu)

Italo R dos Santos

unread,
Sep 19, 2012, 9:36:32 PM9/19/12
to pug...@googlegroups.com
Cara  acho que sou muito enrolado segui 1 passo criei o executavel mas na hora de rodar no windows so apareceu a tela preta esperando acho que um enter pra fechar. sera meu codigo que ta errado. vou anexa aqui pra quem quiser olhar
Descobrindo Salario.py

Luciano Rodrigues da Silva

unread,
Sep 19, 2012, 9:58:07 PM9/19/12
to pug...@googlegroups.com
Use o pastebin pra enviar o código. Além de evitar o anexo ainda fica para outros que possam ter a mesma dúvida no futuro.

http://pastebin.com/

2012/9/19 Italo R dos Santos <italorod...@gmail.com>



--
Até,

Luciano

<quote>
"Na prática, a teoria é outra!"
</quote>

:wq!

Italo R dos Santos

unread,
Sep 19, 2012, 10:09:45 PM9/19/12
to pug...@googlegroups.com
Acho que agora e so mandar o link http://pastebin.com/fzArLwL1

Luciano Rodrigues da Silva

unread,
Sep 19, 2012, 10:18:38 PM9/19/12
to pug...@googlegroups.com
Italo, vc entendeu que o importante aqui é esse comando abaixo, né?
cxfreeze debut_console.py --target-dir exeDir

Italo R dos Santos

unread,
Sep 19, 2012, 10:28:23 PM9/19/12
to pug...@googlegroups.com
sim eu coloquei todo esse comando. mas com o nome do meu arquivo py

Luciano Rodrigues da Silva

unread,
Sep 19, 2012, 10:29:41 PM9/19/12
to pug...@googlegroups.com
Colocou onde?

Italo R dos Santos

unread,
Sep 19, 2012, 10:36:50 PM9/19/12
to pug...@googlegroups.com
eu abri la o terminal fui ate a pasta onde ta o arquivo py (atraves do comando cd ) e dei esse comando

Luciano Rodrigues da Silva

unread,
Sep 19, 2012, 10:38:44 PM9/19/12
to pug...@googlegroups.com
E o que apareceu abaixo do comando?

Italo R dos Santos

unread,
Sep 19, 2012, 10:49:29 PM9/19/12
to pug...@googlegroups.com
apareceu um monte de linhas dizendo  que foi criado um diretorio, copiado algumas coisas
e por ultimo deu um erro
typeerro: copile ( ) expectend string with out null bytes a ultima linha é isso. mas crio a pasta com os arquivos

Renato Oliveira

unread,
Sep 19, 2012, 10:50:11 PM9/19/12
to pug...@googlegroups.com
bota o log de erro no pastie e manda o link por favor
Renato Oliveira
Graduando em Ciência da Computação UFPE - 2009.1
DA de Computação
Linux User - #532503

Italo R dos Santos

unread,
Sep 19, 2012, 11:05:49 PM9/19/12
to pug...@googlegroups.com
blz vou colocar

Italo R dos Santos

unread,
Sep 19, 2012, 11:15:35 PM9/19/12
to pug...@googlegroups.com
ai vai o erro
http://pastebin.com/Q4y1abuK
galera agora vou ter de ir dormir mais assim que puder vejo a resposta de vcs. 

Marc Jr

unread,
Sep 20, 2012, 1:27:46 AM9/20/12
to pug...@googlegroups.com
Oi Italo,

So umas perguntas,
  1. Qual plataforma tu estas usando para construir o executavel?
  2. Qual plataforma tu estas usando para rodar o executavel?
No meu computador tudo se passou bem fiz isso apos baixar teu script.
marc@marc-ubuntu:~/Downloads$ cxfreeze debut_console.py --target-dir exeDir
marc@marc-ubuntu:~/Downloads$ cd exeDir/
marc@marc-ubuntu:~/Downloads/exeDir$ ./Descobrindo\ Salario 

e o output foi esse:
Digite o quanto vc vendeu
Acomulado 500
 Voce ainda nao bateu a Meta. Seu Salario sera o Base


Abraço,
Marcondes


2012/9/20 Italo R dos Santos <italorod...@gmail.com>

Italo R dos Santos

unread,
Sep 20, 2012, 5:46:52 PM9/20/12
to pug...@googlegroups.com
ok rodou perfeita mente o valor prara ser somado tem que ser maior que 50 mil vou ver o que esta errado aqui

Estou usando ubuntu para construir e quero rodar no windows 7

Italo R dos Santos

unread,
Sep 20, 2012, 6:47:47 PM9/20/12
to pug...@googlegroups.com
Cara outra coisa quando vou executar no windows ele pede pra executar com algum programa. qual o programa eu ponho pra executar ?

Marc Jr

unread,
Sep 20, 2012, 10:40:35 PM9/20/12
to pug...@googlegroups.com
Oi Italo,

Contente que voce conseguiu rodar.
Pra rodar o executavel no Windows, voce deve construir-lo usando Windows. :S

Marc Jr

unread,
Sep 23, 2012, 1:39:02 PM9/23/12
to pug...@googlegroups.com
E ai Italo,

Ta pronto ja? :D

2012/9/20 Marc Jr <marcon...@gmail.com>

Fernando Lins

unread,
Mar 18, 2013, 8:05:55 PM3/18/13
to pug...@googlegroups.com
Pessoal, 

Ressuscitando  esse tópico.
Eu estou tentando gerar um executável para windows. Já usei o py2exe e agora o cx_freezer e em ambos dão erro de import.

Traceback (most recent call last):
  File "main.py", line 7, in <module>
  File "Controller\DMRSCrawler.pyc", line 3, in <module>
ImportError: No module named splinter.browser

Vocês saberiam como resolver isso? No setup.py tem que colocar imports ou algo assim?

Grato,
Fernando Lins

Rafael Gama

unread,
Mar 18, 2013, 8:07:14 PM3/18/13
to pug...@googlegroups.com
No cx_freeze, qnd se instala tem alguns setups de exemplo, pelo que usei até hoje não precisei importar nada. é só o python setup.py build.

2013/3/18 Fernando Lins <fm...@cin.ufpe.br>
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para pug-pe+un...@googlegroups.com.

Para postar neste grupo, envie um e-mail para pug...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 



--
Att.


Rafael Gama
@gamamr

Fernando Lins

unread,
Mar 18, 2013, 8:14:11 PM3/18/13
to pug...@googlegroups.com
Mazela, eu fiz python setup.py build e gerou tudo e pah.. eu fui na pasta build e quando clico no executável abre uma janela com esse erro de importação. =/
Fernando Miguel Barros Lins
Graduando em Ciência da Computação - 2009.1
Centro de Informática - UFPE
Cel: +558196416244
msn: migu...@hotmail.com
gtalk: fmb...@gmail.com
skype: fernandol1ns
twitter: @fernandoL1ns

Rafael Gama

unread,
Mar 18, 2013, 8:15:56 PM3/18/13
to pug...@googlegroups.com
erro do windows? já tentasse em outro pc? esse fds eu passei, desesperadores, 2 horas procurando o pau. Quando fui ver era o windows cagado ¬¬

2013/3/18 Fernando Lins <fm...@cin.ufpe.br>

Fernando Lins

unread,
Mar 18, 2013, 8:17:36 PM3/18/13
to pug...@googlegroups.com
Já tentei em duas maquinas diferentes e em ambas o mesmo erro =/

Gileno Alves

unread,
Mar 18, 2013, 8:58:10 PM3/18/13
to pug...@googlegroups.com
Tu já tentou informar o package do splinter manualmente?

Tipo nesse link aqui lá embaixo tem dizendo como criar um instalador e mostra uma variável "packages", tenta colocar o módulo do splinter no pacote.


A ideia de usar o splinter é para rodar os testes também quando o cliente for "instalar" o software?

2013/3/18 Fernando Lins <fm...@cin.ufpe.br>

Fernando Lins

unread,
Mar 21, 2013, 3:39:20 PM3/21/13
to pug...@googlegroups.com
Gileno,

Eu fiz isso que tu falou, e esse erro passou, mas apareceu outro erro.
como o splinter usar selenium, aí na biblioteca do selenium ele tentar pegar o arquivo webdriver.xpi e não encontra.. Eu add manualmente esse arquivo e continuar sem pegar.
Quanto ao uso do splinter, estou mudando de estratégia.. vou fazer de outro jeito.

Fernando Lins

unread,
Mar 21, 2013, 3:39:39 PM3/21/13
to pug...@googlegroups.com
Mas valeu xD

Gileno Alves

unread,
Mar 22, 2013, 11:29:45 AM3/22/13
to pug...@googlegroups.com
Renato me explicou teu problema, vou tentar ver aqui como seria fazer um script com o requests ou o mechanize

2013/3/21 Fernando Lins <fm...@cin.ufpe.br>

Marc Jr

unread,
Mar 22, 2013, 8:54:11 PM3/22/13
to pug...@googlegroups.com
Oh fernando,

Tu podes compartilhar o código pra eu dar uma testada aqui? 


2013/3/22 Gileno Alves <gasc...@gmail.com>
Reply all
Reply to author
Forward
0 new messages