在 Jupyter 中重新导入特定的 Python 文件(场景分析)


Posted in Python onOctober 27, 2019

Jupyter 是数据分析领域非常有名的开发环境,使用 Jupyter 写数据分析相关的代码会大大节约开发时间。

设想这样一个场景:别的部门的同事传给你一个数据分析的模块,用于实现对数据的高级分析。模块里面有上百个函数。

如果直接写 Python 文件来调用数据分析模块,那么使用方法非常简单:

from analyze import FathersAnalyzer

data = [...]
father = FathersAnalyzer(data)
result = father.analyze()
print(f'分析结果为:{result}')

现在,你需要使用 Jupyter 来调用这个分析模块。你应该怎么在 Jupyter里面调用?

你可能会觉得,这还不简单吗?直接把这个模块的代码与 Jupyter Notebook 的 .ipynb 文件放在一起,然后在 Jupyter 里面像导入普通模块那样导入即可,如下图所示:

在 Jupyter 中重新导入特定的 Python 文件(场景分析)

那么现在问题来了,如果我此时修改了 analyze.py 文件,会出现什么情况呢?

我们改一下看看,如下图所示。

在 Jupyter 中重新导入特定的 Python 文件(场景分析)

重新运行这个 Cell 中的代码,代码中虽然有 from analyze import FathersAnalyzer ,看起来像是重新导入了这个模块,但是运行却发现,它运行的是修改之前的代码。

这是因为,一个 Jupyter Notebook 中的所有代码,都是在同一个运行时中运行的代码,当你多次导入同一个模块时,Python 的包管理机制会自动忽略后面的导入,始终只使用第一次导入的结果(所以使用这种方式也可以实现单例模式)。

那么如果我在修改了被导入的包以后,想重新导入它怎么办呢?有3种方案:

importlib

在 Jupyter 中重新导入特定的 Python 文件(场景分析)

但这种方案弊端也很明显——除非你按顺序运行每一个 Cell,否则,你的代码会变成下图这样:

在 Jupyter 中重新导入特定的 Python 文件(场景分析)

在每一个 Cell 里面都需要 重新加载一次分析模块,否则,很有可能在你单独运行某一个 Cell 的时候,用的是老的代码,就会导致难以察觉的 bug。

使用 Jupyter 自带的 %autoreload :

%load_ext autoreload
%autoreload 1
%aimport analyze 

data = 123
importlib.reload(analyze)
father = analyze.FathersAnalyzer(data)
result = father.analyze()
print(result)

运行效果如下图所示:

在 Jupyter 中重新导入特定的 Python 文件(场景分析)

其中关键的代码有三行:

%load_ext autoreload
%autoreload 1
%aimport analyze

这三行代码只有在 Jupyter 里面才能正常运行,在 普通的.py 文件里面这样写会报错。它们的作用是:第1行启动 autoreload 机制。第2行,设置自动加载通过 %aimport 导入的模块。第3行使用 %aimport 导入 analyze 模块。

这样写以后,任意一个 Cell 运行,所有被 %aimport 导入的模块都会被重新加载一次。从而让你每次都使用最新的代码。

当然,你还可以进一步偷懒,把特殊代码缩减为2行:

%load_ext autoreload
%autoreload 2

%autoreload 后面的参数被设置为2时,每次运行任意一个 Cell,都会自动重新加载所有 import xxx 导入的模块。这样做的代价是,运行会慢一些。

总结

以上所述是小编给大家介绍的在 Jupyter 中重新导入特定的 Python 文件的方法,希望对大家有所帮助!

Python 相关文章推荐
Python栈算法的实现与简单应用示例
Nov 01 Python
Python get获取页面cookie代码实例
Sep 12 Python
python使用matplotlib绘制热图
Nov 07 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
python3实现elasticsearch批量更新数据
Dec 03 Python
python 实现批量替换文本中的某部分内容
Dec 13 Python
Python计算机视觉里的IOU计算实例
Jan 17 Python
python爬虫实现获取下一页代码
Mar 13 Python
python中导入 train_test_split提示错误的解决
Jun 19 Python
Django restful framework生成API文档过程详解
Nov 12 Python
Django haystack实现全文搜索代码示例
Nov 28 Python
python实现马丁策略的实例详解
Jan 15 Python
python自动结束mysql慢查询会话的实例代码
Oct 27 #Python
python实现输入任意一个大写字母生成金字塔的示例
Oct 27 #Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 #Python
python用类实现文章敏感词的过滤方法示例
Oct 27 #Python
通过字符串导入 Python 模块的方法详解
Oct 27 #Python
python实现树的深度优先遍历与广度优先遍历详解
Oct 26 #Python
python图的深度优先和广度优先算法实例分析
Oct 26 #Python
You might like
PHP面向对象法则
2012/02/23 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
prototype 1.5 & scriptaculous 1.6.1 学习笔记
2006/09/07 Javascript
List Installed Software Features
2007/06/11 Javascript
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
提高javascript效率 一次判断,而不要次次判断
2012/03/30 Javascript
js自动下载文件到本地的实现代码
2013/04/28 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
vue中的数据绑定原理的实现
2018/07/02 Javascript
vue 使用自定义指令实现表单校验的方法
2018/08/28 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
二年级数学教学反思
2014/01/21 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
师德师风剖析材料
2014/09/30 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
旷工检讨书1000字
2015/01/01 职场文书
最新农村养殖致富:资金投入较低的创业项目有哪些?
2019/09/26 职场文书