Ottenere notimplementederror: impossibile eseguire questa operazione per il tipo di caricatore non registrato

Aug 17 2020

Ho creato un'applicazione Windows per confrontare due fogli Excel utilizzando il dataframe di Pandas. Ho usato dataframe.stlye.apply per evidenziare alcune colonne con colori diversi in base ai dati ed esportarle in un nuovo file Excel. Inoltre, ho usato pyinstaller per convertire .py in .exe.

frammento di codice - la funzione save_op_file serve per applicare lo stile e salvare in 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

Ora, quando eseguo la mia applicazione, viene visualizzato questo errore:

    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*

Potresti aiutarmi a risolvere questo problema. Grazie in anticipo.

Risposte

PritamMondal Aug 18 2020 at 16:41

Sono in grado di risolvere questo problema.

Questo problema si verifica perché pkg_resources non è compatibile con pyinstaller e jinja2 utilizza pkg_resources.

Risoluzione:

Ho usato cx_Freeze invece di pyinstaller per convertire il file .py in .exe e per me ha funzionato bene. Puoi fare riferimento a questo per cx_Freeze- Come posso convertire un .py in .exe per Python?

Riferimento all'uso di cx_Freeze -

Come posso convertire un .py in .exe per Python?

Grazie!