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 socket 超时设置 errno 10054
Jul 01 Python
Python中的pack和unpack的使用
Mar 12 Python
Python实现读取机器硬件信息的方法示例
Jun 09 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
Django配置MySQL数据库的完整步骤
Sep 07 Python
Pytorch的mean和std调查实例
Jan 02 Python
Pycharm小白级简单使用教程
Jan 08 Python
解决Opencv+Python cv2.imshow闪退问题
Apr 24 Python
Python Socket TCP双端聊天功能实现过程详解
Jun 15 Python
python可以用哪些数据库
Jun 22 Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 Python
Vs Code中8个好用的python 扩展插件
Oct 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
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
js验证模型自我实现的具体方法
2013/06/21 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
2015/11/05 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
2017/03/07 Javascript
jQuery日程管理控件glDatePicker用法详解
2017/03/29 jQuery
Node 自动化部署的方法
2017/10/17 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
微信小程序中网络请求缓存的解决方法
2019/12/29 Javascript
Python中的Numpy入门教程
2014/04/26 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
python 哈希表实现简单python字典代码实例
2019/09/27 Python
Python 内置函数globals()和locals()对比详解
2019/12/23 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
Volcom法国官网:美国冲浪滑板品牌
2017/05/25 全球购物
自我鉴定写作要点
2014/01/17 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
 python中的元类metaclass详情
2022/05/30 Python
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android
Spring Boot优化后启动速度快到飞起技巧示例
2022/07/23 Java/Android
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS