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 16 Python
跟老齐学Python之编写类之四再论继承
Oct 11 Python
Flask框架的学习指南之制作简单blog系统
Nov 20 Python
详解Python各大聊天系统的屏蔽脏话功能原理
Dec 01 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
May 21 Python
python实现简易数码时钟
Feb 19 Python
python 执行终端/控制台命令的例子
Jul 12 Python
python config文件的读写操作示例
Sep 27 Python
Python模块汇总(常用第三方库)
Oct 07 Python
python numpy中cumsum的用法详解
Oct 17 Python
python flask中动态URL规则详解
Nov 22 Python
Python进行统计建模
Aug 10 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在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
生成静态页面的PHP类
2006/11/25 PHP
php中的boolean(布尔)类型详解
2013/10/28 PHP
destoon之一键登录设置
2014/06/21 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
让firefox支持IE的一些方法的javascript扩展函数代码
2010/01/02 Javascript
两个select多选模式的选项相互移动(示例代码)
2014/01/11 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
Python切片索引用法示例
2018/05/15 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
python 多线程串行和并行的实例
2019/02/22 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
学校运动会开幕演讲稿
2014/01/04 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
酒店节能减排方案
2014/05/26 职场文书
旅游项目合作意向书
2015/05/08 职场文书
政工师工作总结2015
2015/05/26 职场文书
Python入门学习之类的相关知识总结
2021/05/25 Python
简单聊聊Golang中defer预计算参数
2022/03/25 Golang