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的Urllib库的基本使用教程
Apr 30 Python
详谈python http长连接客户端
Jun 12 Python
Python生成数字图片代码分享
Oct 31 Python
Python 实现删除某路径下文件及文件夹的实例讲解
Apr 24 Python
python批量查询、汉字去重处理CSV文件
May 31 Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 Python
Python文字截图识别OCR工具实例解析
Mar 05 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
python openCV自制绘画板
Oct 27 Python
详解Scrapy Redis入门实战
Nov 18 Python
python 统计list中各个元素出现的次数的几种方法
Feb 20 Python
Python绘制分类图的方法
Apr 20 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
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
PHP实现ftp上传文件示例
2014/08/21 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
JQuery中getJSON的使用方法
2010/12/13 Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
jquery mobile实现可折叠的导航按钮
2017/03/11 Javascript
前端图片懒加载(lazyload)的实现方法(提高用户体验)
2017/08/21 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
ES6中字符串的使用方法扩展
2019/06/04 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
Python中subprocess模块用法实例详解
2015/05/20 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
2020/03/08 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
CSS3 transform的skew属性值图文详解
2014/07/21 HTML / CSS
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
求职信范文怎么写
2014/01/29 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
党员剖析材料范文
2014/09/30 职场文书
团党委领导干部党的群众路线教育实践活动个人对照检查材料思想汇
2014/10/05 职场文书
联欢会开场白
2015/06/01 职场文书
单位更名证明
2015/06/18 职场文书
MySQL分库分表详情
2021/09/25 MySQL