解决Jupyter中导入模块不更新的问题

问题描述

在最近做本科毕业设计时,发现:Jupyter中python导入模块或文件中的函数后,当模块或文件中的函数改变并保存后,再次调用模块时,调用的仍然是原来的函数,因为导入过的模块或函数并没有更新。

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

但是笔者已经更改了文件读取路径:

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

解决方案

在导入模块时更改为:

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

如果是导入函数再加两行:

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

原因分析:

(1)当使用from some_module import some_func时,如果从未导入过some_module模块,则会先进行加载some_module模块,然后从some_module模块只加载要使用到的some_func函数到当前模块中(即当前运行的文件)。
(2)当本地修改过some_func函数后,若要再次导入some_func函数,仅仅再次使用from some_module import some_func是不行的,因为some_module模块已经被加载到本文件中,并且是修改前的some_module模块,此时重新导入会加载此模块中原先的some_func函数,所以本地的修改并不能生效。
(3)所以可以用上面的代码来重新导入some_module,此时本文件中的some_module模块从本地文件中得到更新,再使用from some_module import some_func导入的some_func函数也是更新以后的。

因此,前面的模块导入修改为:

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

文章参考:(24条消息) jupyter重新导入python模块与文件中的函数_ipython 重新import_ccgcccccc的博客-CSDN博客icon-default.png?t=N2N8https://blog.csdn.net/ccgcccccc/article/details/88069044

猜你喜欢

转载自blog.csdn.net/qq_54708219/article/details/129755764
今日推荐