Obteniendo notimplementederror: no se puede realizar esta operación para un tipo de cargador no registrado

Aug 17 2020

He creado una aplicación de Windows para comparar dos hojas de Excel usando el marco de datos de Pandas. Usé dataframe.stlye.apply para resaltar algunas columnas con diferentes colores según los datos y exportarlos a un nuevo archivo de Excel. Además, he usado pyinstaller para convertir .py en .exe.

fragmento de código: la función save_op_file es para aplicar estilo y guardar en Excel.

def save_op_file(df):
    save_path = filedialog.asksaveasfilename(defaultextension='xlsx')
    writer = pd.ExcelWriter(save_path, engine='xlsxwriter')

    df1 = ''
    item_count = 0
    for items in changes:
        pos_count = 0
        for pos in items:
            if item_count == 0 and pos_count == 0:
                df1 = df.style.apply(write_style_yellow, row_idx=pos[0], col_idx=pos[1], axis=None)
            else:
                if pos_count == 0:
                    df1 = df1.apply(write_style_yellow, row_idx=pos[0], col_idx=pos[1], axis= None)
                else:
                    df1 = df1.apply(write_style_red, row_idx=pos[0], col_idx=pos[1], axis= None)

            item_count += 1
            pos_count += 1
            print('df1:')
            print(df1)
            df1.to_excel(writer, sheet_name='Sheet1', index=False)
    writer.save()
def write_style_yellow(x, row_idx, col_idx):
    color = 'background-color: yellow'
    df_styler = pd.DataFrame('', index=x.index, columns=x.columns)
    df_styler.iloc[row_idx,col_idx] = color
    return df_styler
def write_style_red(x,row_idx,col_idx):
    color = 'background-color: red'
    df_styler = pd.DataFrame('', index=x.index, columns=x.columns)
    df_styler.iloc[row_idx,col_idx] = color
    return df_styler

Ahora, cuando estoy ejecutando mi aplicación, arroja este error:

    Exception in Tkinter callback 
       Traceback (most recent call last): 
         File "tkinter\ init .py", line 1883, in _call_ 
         File "Excel.py", line 199, in <lambda> 
         File "Excel.py", line 217, in save_op_file 
         File "pandas\core\frame.py", line 836, in style 
         File "<frozen importlib._bootstrap>", line 991, in _find_and_load 
         File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked 
         File "<frozen importlib._bootstrap>", line 671, in _load_unlocked 
         File "c:\users\asus\pycharmprojects\myproject\venv\lib\site- 
        packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module 
          exec(bytecode, module. dict ) 
         File "pandas\io\formats\style.py", line 51, in <module> 
         File "pandas\io\formats\style.py", line 124, in Styler 
         File "jinja2\environment.py", line 883, in get_template 
         File "jinja2\environment.py", line 857, in _load_template 
         File "jinja2\loaders.py", line 115, in load File "jinja2\loaders.py", line 248, in get_source 
         File "pkg_resources\ init .py", line 1404, in has_resource 
         File "pkg_resources\ init .py", line 1473, in _has 
         NotlmplementedError: Can't perform this operation for unregistered loader type*

¿Podría ayudarme a resolver este problema? Gracias por adelantado.

Respuestas

PritamMondal Aug 18 2020 at 16:41

Puedo resolver esto.

Este problema se produce porque pkg_resources no es compatible con pyinstaller y jinja2 usa pkg_resources.

Resolución:

Usé cx_Freeze en lugar de pyinstaller para convertir el archivo .py en .exe, y funcionó bien para mí. Puede consultar esto para cx_Freeze- ¿Cómo puedo convertir un .py a .exe para Python?

Referencia para usar cx_Freeze -

¿Cómo puedo convertir un .py a .exe para Python?

¡Gracias!