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使用cookie库操保存cookie详解
Mar 03 Python
windows系统中python使用rar命令压缩多个文件夹示例
May 06 Python
用python 实现在不确定行数情况下多行输入方法
Jan 28 Python
pyqt 实现在Widgets中显示图片和文字的方法
Jun 13 Python
详解python解压压缩包的五种方法
Jul 05 Python
pygame实现俄罗斯方块游戏(基础篇3)
Oct 29 Python
Python输出指定字符串的方法
Feb 06 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
Feb 18 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 Python
pycharm 实现复制一行的快捷键
Jan 15 Python
Python 高级库15 个让新手爱不释手(推荐)
May 15 Python
python解析json数据
Apr 29 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
用文本作数据处理
2006/10/09 PHP
FleaPHP的安全设置方法
2008/09/15 PHP
关于php curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
PHP函数学习之PHP函数点评
2012/07/05 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
jquery 插件学习(二)
2012/08/06 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
js中生成map对象的方法
2014/01/09 Javascript
director.js实现前端路由使用实例
2015/02/03 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
原生javascript实现图片无缝滚动效果
2016/02/12 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
Python安装第三方库的3种方法
2015/06/21 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
2014年两会学习心得范例
2014/03/17 职场文书
买房协议书
2014/04/11 职场文书
生态养殖创业计划书
2014/05/06 职场文书
工程项目合作意向书
2015/05/08 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
Python sklearn分类决策树方法详解
2022/09/23 Python