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安装Imaging报错:The _imaging C module is not installed问题解决方法
Aug 22 Python
为python设置socket代理的方法
Jan 14 Python
利用Fn.py库在Python中进行函数式编程
Apr 22 Python
Python 装饰器深入理解
Mar 16 Python
Python存取XML的常见方法实例分析
Mar 21 Python
python实现list元素按关键字相加减的方法示例
Jun 09 Python
Python简单实现的代理服务器端口映射功能示例
Apr 08 Python
Python对切片命名的实现方法
Oct 16 Python
python字典改变value值方法总结
Jun 21 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
python转化excel数字日期为标准日期操作
Jul 14 Python
python创建文本文件的简单方法
Aug 30 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
PHP支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
2016/05/19 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
Node.js连接Sql Server 2008及数据层封装详解
2018/08/27 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
总结javascript三元运算符知识点
2018/09/28 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
使用python实现rsa算法代码
2016/02/17 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
浅谈Python反射 &amp; 单例模式
2019/03/21 Python
python实现在一个画布上画多个子图
2020/01/19 Python
python爬虫可以爬什么
2020/06/16 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
煤矿班组长岗位职责
2013/12/29 职场文书
临床护理求职信
2014/04/26 职场文书
工地质量标语
2014/06/12 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
我的中国梦主题教育活动总结
2015/05/07 职场文书
离婚协议书格式范本
2016/03/18 职场文书
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript