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如何获取服务器硬件信息
May 11 Python
深度辨析Python的eval()与exec()的方法
Mar 26 Python
python实现抠图给证件照换背景源码
Aug 20 Python
python lambda表达式在sort函数中的使用详解
Aug 28 Python
wxPython多个窗口的基本结构
Nov 19 Python
使用pyqt 实现重复打开多个相同界面
Dec 13 Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 Python
Python如何生成xml文件
Jun 04 Python
python程序需要编译吗
Jun 19 Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 07 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 30 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模板引擎SMARTY
2006/10/09 PHP
php写的简易聊天室代码
2011/06/04 PHP
PHP中文分词的简单实现代码分享
2011/07/17 PHP
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
使用php-timeit估计php函数的执行时间
2015/09/06 PHP
基于PHP实现短信验证码接口(容联运通讯)
2016/09/06 PHP
JavaScript prototype对象的属性说明
2010/03/13 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
JQquery的一些使用心得分享
2012/08/01 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
javascript中Function类型详解
2015/04/28 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
2015/05/01 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
浅析jquery unbind()方法移除元素绑定的事件
2016/05/24 Javascript
JavaScript接口的实现三种方式(推荐)
2016/06/14 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
实例讲解JavaScript 计时事件
2020/07/04 Javascript
下载糗事百科的内容_python版
2008/12/07 Python
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
python实现三次样条插值
2018/12/17 Python
Python实现在线批量美颜功能过程解析
2020/06/10 Python
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
高级方案规划工程师岗位职责
2013/11/29 职场文书
机械设计及其自动化求职推荐信
2014/02/17 职场文书
2014年保险业务员工作总结
2014/12/23 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js