Resuelve el problema de que los módulos importados no se actualizan en Jupyter

Descripción del problema

Cuando estaba haciendo mi proyecto de graduación de pregrado recientemente, descubrí que después de que Python importa las funciones en el módulo o archivo en Jupyter, cuando la función en el módulo o archivo se cambia y se guarda, cuando se vuelve a llamar al módulo, la función original es Todavía se llama, porque se ha importado. El módulo o la función de no se actualizó.

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

Pero el autor ha cambiado la ruta de lectura del archivo:

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")

solución

Al importar el cambio de módulo a:

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

Si es una función de importación, agregue dos líneas más:

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álisis de causa:

(1) Al usar from some_module import some_func, si el módulo some_module nunca se ha importado, el módulo some_module se cargará primero, y luego solo la función some_func que se usará se cargará desde el módulo some_module al módulo actual (es decir , el archivo actualmente en ejecución) .
(2) Después de que la función some_func se haya modificado localmente, si desea importar la función some_func nuevamente, no es suficiente usar from some_module import some_func nuevamente, porque el módulo some_module se ha cargado en este archivo, y es el módulo some_module antes de la modificación. En este momento, la reimportación cargará la función original some_func en este módulo, por lo que las modificaciones locales no tendrán efecto.
(3) Entonces puede usar el código anterior para volver a importar algún_módulo.En este momento, el módulo algún_módulo en este archivo se actualiza desde el archivo local, y luego la función alguna_func importada por desde algún_módulo importar alguna_func también se actualiza.

Por lo tanto, la importación del módulo anterior se modifica a:

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

Referencia del artículo: (24 mensajes) Jupyter vuelve a importar módulos y funciones de Python en archivos _ipython re-import_ccgcccccc's blog-CSDN blog icono-predeterminado.png?t=N2N8https://blog.csdn.net/ccgcccccc/article/details/88069044

Supongo que te gusta

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