Resolva o problema de que os módulos importados não são atualizados no Jupyter

Descrição do Problema

Quando eu estava fazendo meu projeto de graduação recentemente, descobri que depois que o python importa as funções no módulo ou arquivo no Jupyter, quando a função no módulo ou arquivo é alterada e salva, quando o módulo é chamado novamente, a função original é ainda chamado, porque foi importado. O módulo ou função de não foi atualizado.

FileNotFoundError: [Errno 2] No such file or directory:

Mas o autor alterou o caminho de leitura do arquivo:

import QDdata as QD
# QDdata.py
class QDloadStrokeData(data.Dataset):

    def __init__(self,no = 0, data_file=None,val = False, image_size=(96,96),transforms=None):
        
        if data_file == None:
            if val == True:
                data_file = "/root/quickdraw dataset after process/quickdraw-doodle-recognition/val/val_dataset.csv"
            else:
                data_file = "/root/quickdraw dataset after process/quickdraw-doodle-recognition/train/" + 'train_k{}.csv'.format(no)
                
        if os.path.exists(data_file) == False:
            print(data_file,"does not exist\n")

solução

Ao importar o módulo mude para:

import some_module # some_module表示某个模块,首次导入
import imp # 导入imp包
imp.reload(some_module) # 重新导入模块

Se for uma função de importação, adicione mais duas linhas:

from some_module import some_func # some_func某个函数,首次导入
import some_module # 防止reload报错
import imp
imp.reload(some_module)
from some_module import some_func # 再次导入

Análise de causa:

(1) Ao usar from some_module import some_func, se o módulo some_module nunca foi importado, o módulo some_module será carregado primeiro e, em seguida, apenas a função some_func a ser usada será carregada do módulo some_module para o módulo atual (isto é , o arquivo atualmente em execução).
(2) Depois que a função some_func foi modificada localmente, se você quiser importar a função some_func novamente, não é suficiente apenas usar from some_module import some_func novamente, porque o módulo some_module foi carregado neste arquivo e é o módulo some_module antes da modificação. Neste momento, a reimportação carregará a função some_func original neste módulo, portanto as modificações locais não terão efeito.
(3) Portanto, você pode usar o código acima para reimportar some_module. Neste momento, o módulo some_module neste arquivo é atualizado a partir do arquivo local e, em seguida, a função some_func importada de some_module import some_func também é atualizada.

Portanto, a importação do módulo anterior é modificada para:

import QDdata as QD
import imp
imp.reload(QD)

Referência do artigo: (24 mensagens) jupyter reimporta módulos e funções python em arquivos _ipython re-import_ccgcccccc's blog-CSDN blog icon-default.png?t=N2N8https://blog.csdn.net/ccgcccccc/article/details/88069044

Acho que você gosta

Origin blog.csdn.net/qq_54708219/article/details/129755764
Recomendado
Clasificación