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中dir函数用法分析
Apr 17 Python
Python编程对列表中字典元素进行排序的方法详解
May 26 Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 Python
Python简单计算数组元素平均值的方法示例
Dec 26 Python
Python实现迭代时使用索引的方法示例
Jun 05 Python
python opencv实现旋转矩形框裁减功能
Jul 25 Python
python 从文件夹抽取图片另存的方法
Dec 04 Python
python实现关闭第三方窗口的方法
Jun 28 Python
python中的逆序遍历实例
Dec 25 Python
Python模拟伯努利试验和二项分布代码实例
May 27 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 Python
python实现发送邮件
Mar 02 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静态类
2006/11/25 PHP
php模板中出现空行解决方法
2011/03/08 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
php二维数组排序详解
2013/11/06 PHP
Laravel实现ApiToken认证请求
2019/10/14 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
javascript Ext JS 状态默认存储时间
2009/02/15 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
一个简单的node.js界面实现方法
2018/06/01 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
vue-cli3项目展示本地Markdown文件的方法
2019/06/07 Javascript
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
python使用正则搜索字符串或文件中的浮点数代码实例
2014/07/11 Python
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
Python for循环及基础用法详解
2019/11/08 Python
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
2014年三八妇女节活动总结
2014/03/01 职场文书
公司股东合作协议书
2014/09/14 职场文书
学习优秀共产党员先进事迹思想报告
2014/09/17 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
神龙架导游词
2015/02/11 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书