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 https://blog.csdn.net/ccgcccccc/article/details/88069044