es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo hacer que joblib funcione con archivos ejecutables (.exe)?

Desarrollé un programa en python para organizar los datos que vienen de archivos xlsx y csv y convertirlos a csv.
Para acelerar el programa, estoy utilizando joblib para realizar un procesamiento paralelo. El programa funciona bien cuando lo ejecuto en la consola, pero no funciona cuando genero un ejecutable usando pyinstaller. Cuando lo ejecuto, no aparece nada en la terminal.

El código principal:

import Conv
from os import getcwd
from time import time
from Df_2_csv import createFolder
from joblib import Parallel, delayed

#Obteniendo el tiempo inicial
t0=time()

path=(getcwd()).replace(“/”,”\”)

#Creando una carpeta “Csv” si no existe
newPath=createFolder(path)

#Obteniendo todos los archivos de cada tipo
all_xlsx= Conv.getAllOfType(path,”.xlsx”)
all_csv= Conv.getAllOfType(path,”.csv”)

#Obteniendo la longitud de las listas
len_all=Conv.len_all(all_xlsx,all_csv)

#Recorriendo los archivos xlsx
Result=Parallel(n_jobs=-1)(delayed(Conv.conv_xlsx)(
fileName,path,newPath,t0,index,len_all) for index,fileName in enumerate(all_xlsx))

#Recorriendo los archivos csv
Result=Parallel(n_jobs=-1)(delayed(Conv.conv_csv)(
fileName,path,newPath,t0,index,len_all) for index,fileName in enumerate(all_csv,start=len(all_xlsx)))

Generé el ejecutable usando:

pyinstaller –onefile Main.py

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Posible solución:

    Pyinstaller podría no poder encontrar el módulo joblib que se requiere para el procesamiento paralelo. Para solucionar esto, intente agregar el siguiente código a su archivo Main.py antes de importar cualquier módulo:

    import sys
    import multiprocessing
    sys.modules['_multiprocessing'] = multiprocessing
    

    Esto debería ayudar a pyinstaller a encontrar el módulo joblib y permitir que el procesamiento paralelo funcione cuando ejecute el ejecutable.

Comments are closed.