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编写一个模仿CPU工作的程序
Apr 16 Python
Python NumPy库安装使用笔记
May 18 Python
python实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
简单解决Python文件中文编码问题
Nov 22 Python
Python使用QRCode模块生成二维码实例详解
Jun 14 Python
Python爬虫包BeautifulSoup异常处理(二)
Jun 17 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
Dec 23 Python
python模拟预测一下新型冠状病毒肺炎的数据
Feb 01 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
Feb 26 Python
python微信智能AI机器人实现多种支付方式
Apr 12 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
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
JSON格式化输出
2014/11/10 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
Centos7 中 Node.js安装简单方法
2016/11/02 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
TypeScript中使用getElementXXX()的示例代码
2019/09/12 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
js数组的基本使用总结
2021/01/18 Javascript
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python学习资料
2007/02/08 Python
进一步了解Python中的XML 工具
2015/04/13 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
python3去掉string中的标点符号方法
2019/01/22 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
Boden英国官网:英国知名原创时装品牌
2018/11/06 全球购物
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
秋季运动会加油稿200字
2014/01/11 职场文书
市级文明单位申报材料
2014/05/07 职场文书
服务行业演讲稿
2014/09/02 职场文书
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书