Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Crear .EXE de un .PY
#1
Buenas, llevo varias semanas intentándolo y no hay manera. No encuentro una guía de como hacerlo y no parece fácil. Tengo una aplicación desarrollada con python y tkinter en la que utilizo varias librerías. Me gustaría empaquetar dicha aplicación en un ejecutable para poder ejecutarla en otros equipos sin necesidad de instalar el interprete de python y tener que ejecutar el .py desde consola.

Alguna idea de como empaquetarlo todo junto, librerías, imágenes, etc...

Gracias, saludos.
Responder
#2
Hola Alfredo. Eso depende de la aplicación que estés usando para empaquetar tu programa. No deberías tener problema si tu dependencia es únicamente Tk. ¿Podrías especificar eso y mostrar particularmente el error que estás obteniendo?

Saludos
Responder
#3
Wink 
Mi aplicación es mucho mas amplia y contiene mas librerías, pero la he reducido a esto para simplificarlo, aun así no consigo empaquetarla.


Código:
import tkinter as tk
from tkinter import ttk

class Application(ttk.Frame):
   def __init__(self, main_window):
       
       super().__init__(main_window)
       main_window.geometry("800x600+200+50")
       #El icono que aparece en nuestra ventana
       main_window.iconbitmap("images/icon.ico")
       

       
       self.pack()
     
main_window = tk.Tk()
app = Application(main_window)
app.mainloop()

He probado siguiente guias y tutoriales de cx_freeze y py2exe, pero nada.... obtengo errores como:

(base) C:\Users\Alfredo\Desktop\App_Twitter_EXE>python setup.py build
running build
running build_exe
Traceback (most recent call last):
  File "setup.py", line 16, in <module>
    executables = executables
  File "C:\Users\Alfredo\Anaconda3\lib\site-packages\cx_Freeze\dist.py", line 349, in setup
    distutils.core.setup(**attrs)
  File "C:\Users\Alfredo\Anaconda3\lib\distutils\core.py", line 148, in setup
    dist.run_commands()
  File "C:\Users\Alfredo\Anaconda3\lib\distutils\dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "C:\Users\Alfredo\Anaconda3\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "C:\Users\Alfredo\Anaconda3\lib\distutils\command\build.py", line 135, in run
    self.run_command(cmd_name)
  File "C:\Users\Alfredo\Anaconda3\lib\distutils\cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "C:\Users\Alfredo\Anaconda3\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "C:\Users\Alfredo\Anaconda3\lib\site-packages\cx_Freeze\dist.py", line 219, in run
    freezer.Freeze()
  File "C:\Users\Alfredo\Anaconda3\lib\site-packages\cx_Freeze\freezer.py", line 616, in Freeze
    self.finder = self._GetModuleFinder()
  File "C:\Users\Alfredo\Anaconda3\lib\site-packages\cx_Freeze\freezer.py", line 342, in _GetModuleFinder
    finder.IncludePackage(name)
  File "C:\Users\Alfredo\Anaconda3\lib\site-packages\cx_Freeze\finder.py", line 659, in IncludePackage
    module = self._ImportModule(name, deferredImports)
  File "C:\Users\Alfredo\Anaconda3\lib\site-packages\cx_Freeze\finder.py", line 311, in _ImportModule
    deferredImports, namespace = namespace)
  File "C:\Users\Alfredo\Anaconda3\lib\site-packages\cx_Freeze\finder.py", line 404, in _InternalImportModule
    parentModule, namespace)
  File "C:\Users\Alfredo\Anaconda3\lib\site-packages\cx_Freeze\finder.py", line 417, in _LoadModule
    namespace)
  File "C:\Users\Alfredo\Anaconda3\lib\site-packages\cx_Freeze\finder.py", line 486, in _LoadPackage
    self._LoadModule(name, fp, path, info, deferredImports, parent)
  File "C:\Users\Alfredo\Anaconda3\lib\site-packages\cx_Freeze\finder.py", line 464, in _LoadModule
    self._RunHook("load", module.name, module)
  File "C:\Users\Alfredo\Anaconda3\lib\site-packages\cx_Freeze\finder.py", line 537, in _RunHook
    method(self, *args)
  File "C:\Users\Alfredo\Anaconda3\lib\site-packages\cx_Freeze\hooks.py", line 615, in load_tkinter
    tclSourceDir = os.environ["TCL_LIBRARY"]
  File "C:\Users\Alfredo\Anaconda3\lib\os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'TCL_LIBRARY'
Responder
#4
Sobre este error en particular aquí tienes algunas soluciones: https://stackoverflow.com/questions/3553...-cx-freeze.
Responder
#5
He conseguido que genere el .exe sin errores aparentemente, pero cuando lo intento ejecutar se abre la aplicacion y se cierra al instante. Alguna idea de que puede ser??
Responder
#6
Probablemente esté arrojando algún error en la consola. Deberías ejecutar tu aplicación desde el símbolo del sistema para poder ver el error.
Responder
#7
Como debería hacer eso?
Responder
#8
Abrir la aplicación Símbolo del sistema de Windows y pegar la ruta de tu archivo ejecutable en la consola.
Responder
#9
Buenas, he ido acotando el error, y solamente me lo lanza cuando intento incluir la librería Matplotlib, si no la incluyo funciona perfectamente.
En la consola me lanza el siguiente error, sabéis que puede ser??

Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.

Saludos, gracias.
Responder
#10
Hola, puedes hacer que cx-Freeze incluya las librerías necesarias pasándolas como una lista en la opción "include_files" de tu archivo setup.py. Algo así:

  1. setup(name='myapp',
  2. version = '1.0',
  3. description = '',
  4. options = {
  5. 'build_exe': {
  6. "include_files": [r"C:\Python37\Lib\site-packages\numpy\core\mkl_intel_thread.dll"]
  7. },
  8. },
  9. executables=executables)
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)