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读写Excel文件的实例
Nov 01 Python
使用Python判断IP地址合法性的方法实例
Mar 13 Python
python使用socket向客户端发送数据的方法
Apr 29 Python
Python 3中的yield from语法详解
Jan 18 Python
Python3 log10()函数简单用法
Feb 19 Python
python mqtt 客户端的实现代码实例
Sep 25 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 Python
Python调用ffmpeg开源视频处理库,批量处理视频
Nov 16 Python
python飞机大战游戏实例讲解
Dec 04 Python
Python 实现一个简单的web服务器
Jan 03 Python
Python Pygame实现俄罗斯方块
Feb 19 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一些十分严重的缺陷详解
2013/06/03 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
php提交表单发送邮件的方法
2015/03/20 PHP
iis6手工创建网站后无法运行php脚本的解决方法
2017/06/08 PHP
jQuery使用技巧简单汇总
2013/04/18 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
Highcharts学习之坐标轴
2016/08/02 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
在Vue项目中引入JQuery-ui插件的讲解
2019/01/27 jQuery
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
Python中的__SLOTS__属性使用示例
2015/02/18 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
Python制作刷网页流量工具
2017/04/23 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
市场营销工作计划书
2014/05/06 职场文书
英文演讲稿
2014/05/15 职场文书
建国大业观后感600字
2015/06/01 职场文书
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android
python3操作redis实现List列表实例
2021/08/04 Python
SQL中的三种去重方法小结
2021/11/01 SQL Server
Java Redisson多策略注解限流
2022/09/23 Java/Android