Python如何重新加载模块


Posted in Python onJuly 29, 2020

问题

你想重新加载已经加载的模块,因为你对其源码进行了修改。

解决方案

使用imp.reload()来重新加载先前加载的模块。举个例子:

>>> import spam
>>> import imp
>>> imp.reload(spam)
<module 'spam' from './spam.py'>
>>>

讨论

重新加载模块在开发和调试过程中常常很有用。但在生产环境中的代码使用会不安全,因为它并不总是像您期望的那样工作。

reload()擦除了模块底层字典的内容,并通过重新执行模块的源代码来刷新它。模块对象本身的身份保持不变。因此,该操作在程序中所有已经被导入了的地方更新了模块。

尽管如此,reload()没有更新像”from module import name”这样使用import语句导入的定义。举个例子:

# spam.py
def bar():
  print('bar')

def grok():
  print('grok')

现在启动交互式会话:

>>> import spam
>>> from spam import grok
>>> spam.bar()
bar
>>> grok()
grok
>>>

不退出Python修改spam.py的源码,将grok()函数改成这样:

def grok():
  print('New grok')

现在回到交互式会话,重新加载模块,尝试下这个实验:

>>> import imp
>>> imp.reload(spam)
<module 'spam' from './spam.py'>
>>> spam.bar()
bar
>>> grok() # Notice old output
grok
>>> spam.grok() # Notice new output
New grok
>>>

在这个例子中,你看到有2个版本的grok()函数被加载。通常来说,这不是你想要的,而是令人头疼的事。

因此,在生产环境中可能需要避免重新加载模块。在交互环境下调试,解释程序并试图弄懂它。

以上就是Python如何重新加载模块的详细内容,更多关于Python重写加载模块的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中的XML库4Suite Server的介绍
Apr 14 Python
Python判断文本中消息重复次数的方法
Apr 27 Python
Pycharm学习教程(7)虚拟机VM的配置教程
May 04 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
Sep 22 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
python实现自动发送邮件
Jun 20 Python
对numpy.append()里的axis的用法详解
Jun 28 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
python实现简单日志记录库glog的使用
Dec 13 Python
简单了解Python3 bytes和str类型的区别和联系
Dec 19 Python
python munch库的使用解析
May 25 Python
Python加速程序运行的方法
Jul 29 #Python
如何在python中判断变量的类型
Jul 29 #Python
Python中的With语句的使用及原理
Jul 29 #Python
解决c++调用python中文乱码问题
Jul 29 #Python
Python 实现简单的客户端认证
Jul 29 #Python
Tensorflow使用Anaconda、pycharm安装记录
Jul 29 #Python
学python爬虫能做什么
Jul 29 #Python
You might like
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
微信红包随机生成算法php版
2016/07/21 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
JQuery jsonp 使用示例代码
2009/08/12 Javascript
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
JavaScript重载函数实例剖析
2016/05/13 Javascript
JavaScript实现自动切换图片代码
2016/10/11 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
python实现二叉树的遍历
2017/12/11 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
django 消息框架 message使用详解
2019/07/22 Python
python实现梯度下降和逻辑回归
2020/03/24 Python
基于Python测试程序是否有错误
2020/05/16 Python
英国设计师珠宝网站:Joshua James Jewellery
2020/03/01 全球购物
法学研究生自我鉴定范文
2013/12/04 职场文书
七年级地理教学反思
2014/01/26 职场文书
学徒工职责
2014/03/06 职场文书
搞笑老公保证书
2015/02/26 职场文书
幼师辞职信范文
2015/02/27 职场文书
超市收银员岗位职责
2015/04/07 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
初婚未育证明样本
2015/06/18 职场文书
《好妈妈胜过好老师》:每个孩子的优秀都是有源头的
2020/01/03 职场文书
如何通过cmd 连接阿里云服务器
2022/04/18 Servers