jupyter重新导入python模块与文件中的函数

本文介绍了解决Jupyter环境中Python模块或文件中函数更新后无法实时反映的问题。提供了两种方法,一是通过imp模块的reload函数,二是利用IPython的autoreload功能,确保在代码修改保存后,能够立即使用最新的函数定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jupyter重新导入python模块与文件中的函数

问题

jupyter中python导入模块或文件中的函数后,当模块或文件中的函数改变并保存后,再次调用其中的函数时,调用的仍然是原来的函数,因为导入过的模块或函数并没有更新。

解决方法

方法1

对于python3.4+,重新导入模块时:

import some_module #首次导入
import imp
imp.reload(some_module) #重新导入

重新导入函数时:

from some_module import 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. 所以可以先使用
import some_module #防止reload报错
import imp
imp.reload(some_module)

 来重新导入some_module,此时本文件中的some_module模块从本地文件中得到更新,再使用from some_module import some_func导入的some_func函数也是更新以后的。

方法2

对于jupyter而言,可以使用IPython的magic语法:

%load_ext autoreload
%autoreload 2

注意,这两句要放在最前面,至少要放在要首次导入模块语句的前面。如果先导入模块,再打开autoreload,然后再导入一遍模块,经测试这样不能实现自动导入。autoreload文档:https://ipython.readthedocs.io/en/stable/config/extensions/autoreload.html

参考:
优快云: jupyter如何重新加载模块
Live-reloading of Python Modules in the Python REPL / IPython / Jupyter Console
stackoverflow: Reimport a module in python while interactive
优快云: python模块,reload所有模块以及坑

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值