Python 重新加载模块
简述
在进行模块化编程时,经常会遇到这样一种场景:
编写了一个 Python 模块,并用
import my_module
的形式进行导入。当对该模块进行更改后,即使重新导入,其中的任何改变都不会被识别,这使得模块调试变得非常困难。
那么,该如何解决这个问题?
| 版权声明:一去、二三里,未经博主允许不得转载。
模块仅被导入一次
出于效率原因(导入必须找到文件,将其编译成字节码,并且运行代码),Python shell 在每次会话中,只对每个模块导入一次。
例如,有一个名为 hello.py
的模块,包含以下代码:
print('Hello, Python!')
如果多次导入,会出现什么效果?
>>> import hello
Hello, Python!
>>>
>>> import hello
>>> import hello
可以看到,代码只执行了一次。也就是说,模块仅被导入了一次。
重新加载模块
倘若,更改了已经在 Python shell 中导入的模块,然后重新导入该模块,Python 会认为“我已经导入了该模块,不需要再次读取该文件”,所以更改将无效。
要解决这个问题,有以下几种方式:
- 最简单、最有效的方法:重新启动 Python shell。但是,这也有缺点,特别是丢失了 Python shell 名称空间中存在的数据以及其他导入模块中的数据。
- 对于简单的情况,可以使用 Python 的
reload()
函数。在许多情况下,在编辑一个模块之后就足够了。 - 对于更复杂的情况,重新加载被编辑的模块也需要重新加载其依赖/导入的模块(因为它们必须作为被编辑模块初始化的一部分进行初始化),所以 IPython 的 autoreload 扩展很有用。
PS: 下面主要介绍第 2 种方式 - reload()
,其他方式自行尝试。
reload()
是 Python 提供的一种简洁的方式,在不同的 Python 版本中有不同的表现形式:
- 在 Python 2.x 中,reload() 是内置函数。
- 在 Python 3.0 - 3.3 中,可以使用 imp.reload(module)。
- 在 Python 3.4 中,imp 已经被废弃,取而代之的是 importlib。
>>> import importlib
>>> import hello
Hello, Python! # 修改前的内容
>>>
>>> importlib.reload(hello)
I am coming... # 修改后的内容
<module 'hello' from '/home/wang/Projects/hello.py'>
Python 重新加载模块相关推荐
- python重新加载模块_jupyter实现重新加载模块
最近几年,jupyter在全球数据科学领域,已经成为不可或缺的重要工具. 在jupyter中用python写程序,若import了自己写的外部模块,如果这个外部模块有更新,再次执行import,jup ...
- python动态加载模块有什么用_人生苦短我用python(02)动态加载模块
继第一期[人生苦短我用Python系列专栏]发布后,深受广大睿普迷的一致好评,经常问小普第二期什么时候出呀?好期待~ 来来来小普这就呈上第二期[02动态加载模块] 错过了第一期的小伙伴们可以点此穿越哦 ...
- python重新加载文件_Python的重新加载知识点总结
简述Python的重新加载 为防止两个模块互相导入的问题,Python默认所有的模块都只导入一次,如果需要重新导入模块, Python2.7可以直接用reload(),Python3可以用下面几种方法 ...
- go加载python_人生苦短我用python(02)动态加载模块-Go语言中文社区
文章内容为原创,欢迎转载请注明出处 作者: EflyPro->晦明禅师 文章来源:公众号"睿江云计算" 继第一期[人生苦短我用Python系列专栏]发布后,深受广大睿普迷的一 ...
- python没有错误但是不显示结果_为什么我在Python3中加载模块时遇到问题但在Python2中没有加载?...
根据我使用的 Python安装,我在加载模块时遇到了一些问题.当我输入 from quantecon import approx_markov 在使用Python 3.4.0的终端中,返回以下错误消息 ...
- python自带的对称算法_一种基于对称算法和专用加载模块的Python程序模块加密方法...
一种基于对称算法和专用加载模块的Python程序模块加密方法 [专利说明]一种基于对称算法和专用加载模块的Python程序模块加密方法 技术领域 [0001]本发明涉及一种网络安全技术,具体涉及一种P ...
- python为什么import不了_python – 为什么PyImport_Import无法从当前目录加载模块?
我正在尝试运行embedding example并且我无法从当前工作目录加载模块,除非我将其显式添加到sys.path然后它可以工作: PyRun_SimpleString("import ...
- python3 重新运行本程序_python-3.x – 在py.test测试中重新启动python(或重新加载模块)...
要重新加载模块,请尝试使用库imp中的reload() 例: from imp import reload import some_lib #do something reload(some_lib) ...
- [转载] 在IPython中重新加载模块 importlib
参考链接: 在Python中重新加载模块 起因: 我们在学习 python 的时候,经常性的会用到 Ipython,进行函数的测试,但是我们会经常性的遇到调试函数,反复的修改函数,所以需要重新载入函数 ...
最新文章
- servlet程序HTTP Status 500 - Error instantiating servlet class 解决
- iphone录屏怎么录声音_ev录屏怎么录制声音 ev录屏声音设置教程
- QT实现动态的wave水波纹
- 云计算环境下的应用架构设计
- 【渝粤教育】国家开放大学2018年春季 7392-22FMatlab语言及其应用 参考试题
- php mysql 绕过_PHP中md5绕过
- WPF圆角按钮与触发颜色变化
- JVM 运行时数据区域总结
- 数据类型总结(干货)
- 音乐 美术 计算机期末考试表,2021东莞中考音乐美术信息技术合格性考试时间安排...
- CVS文件的常见操作
- 机器学习资料合计(一)
- Java中的==符号与equals()的使用(测试两个变量是否相等)
- 图书管理系统需求分析
- linux连接Redis客户端
- VMware vSphere Esxi官网下载页面链接
- 封禁恶意IP访问在我司实践总结
- oppo手机删除计算机怎样恢复,▷提示|如何将OPPO手机恢复为出厂设置
- u盘插电脑计算机卡了,电脑插入U盘就卡顿?3个原因你需要了解一下
- MySQL 两张表关联更新(用一个表的数据更新另一个表的数据)两个表使用条件从另外一个表获取数据更新本表
热门文章
- 【Pycharm】主题背景颜色更改
- 不是家电品牌!不是家装品牌!不是家居品牌!三翼鸟是啥?
- HDFS启动报错Expected to be able to read up until at least txid but unable to find any edit logs
- 对北京大学红旗在线的一次友情检测
- 基于geoserver的伪三维地图制作
- 地图制图领域使用计算机优点在于哪些方面,电子地图制图的运用与发展
- 已拦截跨源请求:同源策略禁止读取位于 http:**** 的远程资源。(原因:CORS 头缺少 ‘Access-Control-A
- ListView--QQ联系人样式
- 化妆品行业如何开启新零售模式?你懂了吗
- python精通能赚钱吗_月入3千到月入10万,精通数据分析的人到底有多赚?