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中列表生成式的用法
Mar 31 Python
Django应用程序中如何发送电子邮件详解
Feb 04 Python
python将ansible配置转为json格式实例代码
May 15 Python
python使用scrapy发送post请求的坑
Sep 04 Python
Python语言进阶知识点总结
May 28 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
Jun 04 Python
python中 * 的用法详解
Jul 10 Python
Python数据分析模块pandas用法详解
Sep 04 Python
利用Python绘制有趣的万圣节南瓜怪效果
Oct 31 Python
flask框架蓝图和子域名配置详解
Jan 25 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
详解OpenCV曝光融合
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
php cache类代码(php数据缓存类)
2010/04/15 PHP
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
jquery如何获取复选框的值
2013/12/12 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
angular+webpack2实战例子
2017/05/23 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
vue点击当前路由高亮小案例
2019/09/26 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
vue下canvas裁剪图片实例讲解
2020/04/16 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
python 链接和操作 memcache方法
2017/03/04 Python
Python装饰器用法实例总结
2018/02/07 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
Python模块的制作方法实例分析
2019/12/21 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
英国标准协会商店:BSI Shop
2019/02/25 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
大学生实习介绍信
2015/05/05 职场文书
java多态注意项小结
2021/10/16 Java/Android
React Fragment介绍与使用详解
2021/11/11 Javascript