segunda-feira, 13 de julho de 2015

Criando um executável (.exe)

Olá pessoas.


Desculpem a demora, mas o final de semestre na faculdade estava me bloqueando.

Vou tentar tirar o atraso (no sentido não figurado) agora nas férias escolares.

Pois bem. Todo mundo quer criar um programa e sair espalhando por aí entre os amiguinhos, não é verdade?

Mas os amiguinhos não querem, de maneira geral, instalar o Python pra poder executar o código (muitos até querem mas não fazem ideia do que é isso, pois o poder de luta deles é menor que o do Chaos e do Oolong)



Então, como fazer pra fazer? MUITO SIMPLES: Criamos um executável!!!

Sim, senhor escrevedor desse blog. Mas como faço isso?

Acalme-se, jovem leitor! Aqui vai a explicação:

Existe uma ferramenta chamada CX_FREEZE que faz isso pra você. Faça o download adequado para a versão de Python que você está utilizando, instale e... voilà!

Depois de instalado, você precisa criar um arquivo de nome setup.py que deve ser armazenado na mesma pasta onde está o arquivo .py que você deseja transformar em .exe.
Vamos cirar um hello_world.py:

print("Hello World\n")


O arquivo setup.py deve ser:

from cx_Freeze import setup, Executable

setup(
    name="Hello World EXECUTABLE",
    version = "1.0.0",
    description = ".py to .exe",
    executables = [Executable("hello_world.py")])


Ôpa! Mas senhor escrevedor desse blog! Eu executei esse código e nada aconteceu!!!

Já disse pra se acalmar, jovem leitor! Não execute esse código!

Você precisa fazer o que se segue:

  1. Abra um prompt do MS-DOS (cmd)
  2. Acesse o local do arquivo setup.py
  3. execute a linha de comando python setup.py build

Agora sim está pronto o seu hello_world.exe!!!
Note que será criada uma pasta build dentro da pasta onde está o seu código. Dentro desta pasta tem uma outra pasta contendo todos os arquivos necessários para a execução do seu programa.

—IMPORTANTE—

Quando for enviar aos seus coleguinhas o seu programa, não envie apenas o executável (*.exe). Ele precisa de todos aqueles outros arquivos dentro da pasta build para ser executado, portanto, compacte a pasta e diga para seus coleguinhas extraírem tudo para que o seu programa funcione.

E não se esqueça: 13 de julho é o quê, Torloni???



32 comentários:

  1. Até eu que sou noob consegui criar um executável :)

    ResponderExcluir
    Respostas
    1. Você é mais que expert, +Adriano Pereira. Obrigado por acompanhar o blog.

      Excluir
  2. Ficou fera, mas e o java? ta manjando? heuaheuhaeuah

    ResponderExcluir
  3. Este comentário foi removido pelo autor.

    ResponderExcluir
  4. +Kaio Fernandes.
    Deixa eu ver se entendi.
    Você tentou criar o executável e deu erro, certo?
    Verifique a forma que você importou as bibliotecas utilizadas no seu código. Se você colocou direto no PATH pode dar erro.
    Veja se a versão de Python que você utiliza é compatível à versão do cx_freeze que você está utilizando.

    ResponderExcluir
  5. teu blog é humilde mais tem potencial! ja esta nos meus favoritos =D

    #javaitarde foi foda huauhauhahuauha

    ResponderExcluir
  6. Nos ensina a colocar o script online em um BOT do app TELEGRAM ?

    ResponderExcluir
  7. Fiz tudo certinho, mas na hora de executar a linha de comando...:

    ImportError: No module named 'cx_Freeze.util'

    =FF

    ResponderExcluir
    Respostas
    1. consegui. quem tiver o mesmo problema, atualize o cx_Freezer através do comando :python -m pip install cx_Freeze --upgrade

      Excluir
  8. muito bom, mas bom mesmo. Na medida que o Python sai nova release, seria interessante usar o cx_Freeze atualizado tambem. Mas tá muito bom

    ResponderExcluir
    Respostas
    1. Que bom que gostou, meu chapa!
      Se tiver alguma dúvida e/ou sugestão de posts, por favor nos diga.

      Excluir
  9. consegui fazer o exe, mas não estou conseguindo abrir.

    ResponderExcluir
    Respostas
    1. Tente abrir o executável (exe) no prompt de comandos (cmd).
      Assim você verá o erro que está sendo gerado.

      Excluir
  10. Consegui criar o exe, porem ele não esta compilando uma biblioteca, como faço? Falta compilar a biblioteca mymssql

    ResponderExcluir
    Respostas
    1. Cara... Se você está tentando executar o programa em outro computador, você tem que copiar a pasta toda que o cx_freeze cria.
      Dentro dela vão juntas todas as bibliotecas necessárias pro seu programa rodar.
      Mas se não for esse o caso, temos que analisar melhor o problema. Se tiver como mandar um print screen ou copiar a mensagem de erro.

      Excluir
  11. Hello guys!!! consgui fazer o .exe e tals...mas quando rodo o programa fica com o prompt aberto, tem como com o cx_Freese fazer com que o programa fique invisível??... sei que que com o pyinstaller é possível, por exemplo, digito pyinstaller -w nome_do_arquivo!!

    ResponderExcluir
  12. Este comentário foi removido pelo autor.

    ResponderExcluir
  13. no final da copilação da esse erro aki File "C:\Users\Jonathan Barcelos\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cx_Freeze\hooks.py", line 613, in load_tkinter
    tclSourceDir = os.environ["TCL_LIBRARY"]
    File "C:\Users\Jonathan Barcelos\AppData\Local\Programs\Python\Python36-32\lib\os.py", line 669, in __getitem__
    raise KeyError(key) from None
    KeyError: 'TCL_LIBRARY'

    ResponderExcluir
    Respostas
    1. é só colocar essas linhas no setup

      import os
      os.environ['TCL_LIBRARY'] = "C:\\Users\\AppData\\Local\\Programs\\Python\\Python36-32\\tcl\\tcl8.6"
      os.environ['TK_LIBRARY'] = "C:\\Users\\AppData\Local\\Programs\\Python\\Python36-32\\tcl\\tcl8.6"

      Excluir
  14. Quando eu vou executar a linha de comando python setup.py build, aparece a mensagem:

    'python' não é reconhecido como um comando interno
    ou externo, um programa operável ou um arquivo em lotes.

    O que pode estar acontecendo? Estou utilizando o python 3.6.2

    ResponderExcluir
  15. Quando vc for instalar o Python marcar a opção (Add Python 3. .. to PATH) desta forma você não precisará configurar as variáveis de ambiente do seu Windows posteriormente.

    ResponderExcluir
  16. Obrigado pela dica, consegui em menos de 5 minutos algo que achei que demoraria horas pra resolver!
    Valeu!

    ResponderExcluir
    Respostas
    1. Fico muito feliz por ter ajudado, cara! Qualquer dúvida, pode mandar pra gente!

      Excluir
  17. Cara, o meu deu um erro enorme no cmd. Pode me ajudar?
    C:\Users\Benfica\PycharmProjects>python setup.py build
    running build
    running build_exe
    Traceback (most recent call last):
    File "setup.py", line 7, in
    executables=[Executable("Cartola.py")])
    File "C:\Users\Benfica\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cx_Freeze\dist.py", line 349, in setup
    distutils.core.setup(**attrs)
    File "C:\Users\Benfica\AppData\Local\Programs\Python\Python36-32\lib\distutils\core.py", line 148, in setup
    dist.run_commands()
    File "C:\Users\Benfica\AppData\Local\Programs\Python\Python36-32\lib\distutils\dist.py", line 955, in run_commands
    self.run_command(cmd)
    File "C:\Users\Benfica\AppData\Local\Programs\Python\Python36-32\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
    File "C:\Users\Benfica\AppData\Local\Programs\Python\Python36-32\lib\distutils\command\build.py", line 135, in run
    self.run_command(cmd_name)
    File "C:\Users\Benfica\AppData\Local\Programs\Python\Python36-32\lib\distutils\cmd.py", line 313, in run_command
    self.distribution.run_command(command)
    File "C:\Users\Benfica\AppData\Local\Programs\Python\Python36-32\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
    File "C:\Users\Benfica\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cx_Freeze\dist.py", line 218, in run
    zipExcludePackages = self.zip_exclude_packages)
    File "C:\Users\Benfica\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cx_Freeze\freezer.py", line 150, in __init__
    self._VerifyConfiguration()
    File "C:\Users\Benfica\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cx_Freeze\freezer.py", line 485, in _VerifyConfiguration
    executable._VerifyConfiguration(self)
    File "C:\Users\Benfica\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cx_Freeze\freezer.py", line 679, in _VerifyConfiguration
    self._GetBaseFileName()
    File "C:\Users\Benfica\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cx_Freeze\freezer.py", line 694, in _GetBaseFileName
    raise ConfigError("no base named %s", name)
    cx_Freeze.freezer.ConfigError: no base named Console

    ResponderExcluir