Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Crear .EXE de un .PY
#11
Buenas, al fin he solucionado los problemas que tenia al empaquetar un .exe, me crea el ejecutable y me surge un nuevo problema. Desde la consola de comandos escribo la ruta y ejecuta la aplicación sin problemas, pero si hago doble clic se abre y se cierra al instante. Alguien tiene alguna idea de que puede estar causando el error? No me muestra ningún mensaje ni en la consola ni nada. Este es el setup.py que utilizo para generar el .exe
Código:
import os
from cx_Freeze import setup, Executable

os.environ['TCL_LIBRARY'] = "C:\\Users\\Alfredo\\Anaconda3\\tcl\\tcl8.6"
os.environ['TK_LIBRARY'] = "C:\\Users\\Alfredo\\Anaconda3\\tcl\\tk8.6"

buildOptions = dict(
   packages = ['events', 'pandas', 'datetime','matplotlib', 'numpy'], #numpy
   excludes = [],
   include_files=['tcl86t.lib', 'tk86t.lib', 'images', 'Usuarios.xlsx', 'platforms', 'mkl_intel_thread.dll']
)

import sys
base = 'Win32GUI' if sys.platform=='win32' else None

executables = [
   Executable('main.py', icon = "images/icon.ico") #base=base
]

setup(name='editor',
     version = '1.0',
     description = '',
     options = dict(build_exe = buildOptions),
     executables = executables)
Responder
#12
Al parecer eso puede ocurrir si inicias tu aplicación con la siguiente comprobación:

Código:
if __name__ == "__main__":
    # ...

Removiendo el condicional debería funcionar.
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#13
No tengo puesto ese condicional Francisco, sabes que otra cosa podría ser?

EDITO: Acabo de comentar las lineas que pintan el gráfico y si que funciona:

#Genera el grafico y lo muestra en el canvas
'''file = pd.read_excel('Usuarios.xlsx')
df = pd.DataFrame(file)
grp=df.groupby("Indice")
plot = grp.size().plot(kind='bar', title="Titulo").set_ylabel("Users")
self.fig = plot.get_figure()
#Establece el tamaño del grafico en pulgadas
self.fig.set_size_inches((self.graphic_w ,self.graphic_h))
self.fig_photo=events.draw_figure(self.graphic_canvas, self.fig, (30, 30)) '''

Como anotación diré que no estoy utilizando matplotlib, genero el gráfico con el mismo data frame de Pandas. Debería usar matplotlib?
Responder
#14
Podría ser que la ruta relativa de Usuarios.xlsx no esté funcionando. Intenta esto:

Código:
from os import getcwd
import os.path
# ...
file = pd.read_excel(os.path.join(os.getcwd(), "Usuarios.xlsx"))

Aunque solo estoy suponiendo. Debe haber algún error que se está generando pero por alguna razón no se muestra.
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#15
Nada Francisco, no se soluciona el error. Es muy raro porque genero el exe con CX_FREEZE y le pongo precisamente para que muestre la consola para visualizar los posibles errores. El caso es que cuando termina de construir el exe, voy a la carpeta donde lo ha generado, escribo "main.exe" y lo ejecuta sin errores ni problemas. Pero cuando hago doble clic a main.exe no funciona.Ya no se que puede ser. Y no tengo ni idea de que error buscar en internet para ver posibles soluciones.

EDITO:
Buenas Francisco, a ver acabo de especificar un poco mas mi error, después de generar el .Exe, ejecuto main.exe con el prompt de Anaconda como he mencionado antes, y ahora en vez de dar doble clic intento ejecutarlo igual con el símbolo del sistema de windows y voilá, ahora me vuelve a mostrar el error: Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll

Este error lo solucioné incluyendo en el archivo setup.py el archivo mkl_intel_thread.dll pero ahora me sigue dando problemas, no se si tengo que instalar algo, actualizar algo o copiar ese archivo en un lugar en concreto
Responder
#16
Hola Alfredo. Tienes que asegurarte que todas las dependencias de tu ejecutable tienen que estar en la misma ruta que él.
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#17
Te recomiendo Pyinstaller, contiene muchas opciones, como por ejemplo, poner iconos, usar UPX, etc. Más info en su documentación.
Responder
#18
buen post
Responder
#19
hola tengo el mismo problema, genero el ejecutable con cx_freeze, me da un problema con la libreria Numpy pero en realidad no la uso, a no ser que folium u otra libreria la use. Cree el archivo setup de la siguiente forma:
from cx_Freeze import setup, Executable

options = {
'build_exe': {
'packages': ['numpy'], # Lista de paquetes que quieres incluir
'includes': ['numpy'], # Lista de módulos que quieres incluir
}
}

executables = [
Executable('main.py', targetName='main.exe') # Nombre de tu script principal y nombre del ejecutable
]

setup(
name='Centro de Monitoreo',
version='1.0',
description='Descripción del proyecto',
options=options,
executables=executables
)
y ejecuto la compilacion asi: python setup.py build
me crea la carpeta build dentro de mi proyecto y cuando ejecuto ya en modo grafico con doble click o desde el CMD me sigue dando el siguiente error:

\Ejemplos Python\CMC\build\exe.win-amd64-3.11>main
Traceback (most recent call last):
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python311\Lib\site-packages\numpy\core\__init__.py", line 24, in <module>
from . import multiarray
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python311\Lib\site-packages\numpy\core\multiarray.py", line 10, in <module>
from . import overrides
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python311\Lib\site-packages\numpy\core\overrides.py", line 8, in <module>
from numpy.core._multiarray_umath import (
ImportError: DLL load failed while importing _multiarray_umath: No se puede encontrar el módulo especificado.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python311\Lib\site-packages\numpy\__init__.py", line 144, in <module>
from numpy.__config__ import show as show_config
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python311\Lib\site-packages\numpy\__config__.py", line 4, in <module>
from numpy.core._multiarray_umath import (
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python311\Lib\site-packages\numpy\core\__init__.py", line 50, in <module>
raise ImportError(msg)
ImportError:

IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!

Importing the numpy C-extensions failed. This error can happen for
many reasons, often due to issues with your setup or how NumPy was
installed.

We have compiled some common reasons and troubleshooting tips at:

https://numpy.org/devdocs/user/troublesh...error.html

Please note and check the following:

* The Python version is: Python3.11 from "C:\Ejemplos Python\CMC\build\exe.win-amd64-3.11\main.exe"
* The NumPy version is: "1.26.1"

and make sure that they are the versions you expect.
Please carefully study the documentation linked above for further help.

Original error was: DLL load failed while importing _multiarray_umath: No se puede encontrar el módulo especificado.


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python311\Lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 139, in run
module_init.run(name + "__main__")
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python311\Lib\site-packages\cx_Freeze\initscripts\console.py", line 18, in run
exec(code, module_main.__dict__) # pylint: disable=exec-used
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "main.py", line 9, in <module>
File "C:\Ejemplos Python\CMC\inci_cons.py", line 18, in <module>
from crea_mapa import *
File "C:\Ejemplos Python\CMC\crea_mapa.py", line 1, in <module>
import folium #Importa la libreria que crea el mapa
^^^^^^^^^^^^^
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python311\Lib\site-packages\folium\__init__.py", line 17, in <module>
from folium.features import (
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python311\Lib\site-packages\folium\features.py", line 11, in <module>
import numpy as np
File "C:\Users\Usuario\AppData\Local\Programs\Python\Python311\Lib\site-packages\numpy\__init__.py", line 149, in <module>
raise ImportError(msg) from e
ImportError: Error importing numpy: you should not try to import numpy from
its source directory; please exit the numpy source tree, and relaunch
your python interpreter from there.

ademas antes de compilar incorpore los archivos _multiarray_umath.cp311-win_amd64.pyd y multiarray.py en la misma carpeta de mi proyecto y luego de generado el .exe en la misma carpeta del .exe y nada. Si alguien me puede dar una mano con esto se lo agradeceria mucho. Gracias
Responder


Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)