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中的五种异常处理机制介绍
Sep 02 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
Python内建模块struct实例详解
Feb 02 Python
Python+pandas计算数据相关系数的实例
Jul 03 Python
python实现图片筛选程序
Oct 24 Python
在Python中定义一个常量的方法
Nov 10 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
使用Python快速制作可视化报表的方法
Feb 03 Python
pybind11和numpy进行交互的方法
Jul 04 Python
matplotlib.pyplot.matshow 矩阵可视化实例
Jun 16 Python
Python同时处理多个异常的方法
Jul 28 Python
学会用Python实现滑雪小游戏,再也不用去北海道啦
May 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
php 中include()与require()的对比
2006/10/09 PHP
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
一个PHP的QRcode类与大家分享
2011/11/13 PHP
php实现复制移动文件的方法
2015/07/29 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
精心挑选的15款优秀jQuery 本特效插件和教程
2012/08/06 Javascript
推荐一款jQuery插件模板
2015/01/09 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
简单了解JavaScript sort方法
2019/11/25 Javascript
Django实现图片文字同时提交的方法
2015/05/26 Python
对python中raw_input()和input()的用法详解
2018/04/22 Python
对pandas写入读取h5文件的方法详解
2018/12/28 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
python 函数中的参数类型
2020/02/11 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
商务英语本科生的自我评价分享
2013/11/15 职场文书
转党组织关系介绍信
2014/01/08 职场文书
幼儿园庆六一活动方案
2014/03/06 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
加强作风建设心得体会
2014/10/22 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
明确岗位职责
2015/02/14 职场文书
2015年化验室工作总结
2015/04/23 职场文书
党员违纪检讨书
2015/05/05 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
人生感悟经典句子
2019/08/20 职场文书
爱国之歌(8首)
2019/09/29 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python