Python 重新加载模块
2017-07-20 19:14
489 查看
简述
在进行模块化编程时,经常会遇到这样一种场景:编写了一个 Python 模块,并用
import my_module的形式进行导入。当对该模块进行更改后,即使重新导入,其中的任何改变都不会被识别,这使得模块调试变得非常困难。
那么,该如何解决这个问题?
简述
模块仅被导入一次
重新加载模块
版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820
模块仅被导入一次
出于效率原因(导入必须找到文件,将其编译成字节码,并且运行代码),Python shell 在每次会话中,只对每个模块导入一次。例如,有一个名为
hello.py的模块,包含以下代码:
print('Hello, Python!')
如果多次导入,会出现什么效果?
>>> import hello Hello, Python! >>> >>> import hello >>> import hello
可以看到,代码只执行了一次。也就是说,模块仅被导入了一次。
重新加载模块
倘若,更改了已经在 Python shell 中导入的模块,然后重新导入该模块,Python 会认为“我已经导入了该模块,不需要再次读取该文件”,所以更改将无效。要解决这个问题,有以下几种方式:
最简单、最有效的方法:重新启动 Python shell。但是,这也有缺点,特别是丢失了 Python shell 名称空间中存在的数据以及其他导入模块中的数据。
对于简单的情况,可以使用 Python 的
reload()函数。在许多情况下,在编辑一个模块之后就足够了。
对于更复杂的情况,重新加载被编辑的模块也需要重新加载其依赖/导入的模块(因为它们必须作为被编辑模块初始化的一部分进行初始化),所以 IPython 的 autoreload 扩展很有用。
PS: 下面主要介绍第 2 种方式 -
reload(),其他方式自行尝试。
reload()是 Python 提供的一种简洁的方式,在不同的 Python 版本中有不同的表现形式:
在 Python 2.x 中,reload() 是内置函数。
在 Python 3.0 - 3.3 中,可以使用 imp.reload(module)。
在 Python 3.4 中,imp 已经被废弃,取而代之的是 importlib。
>>> import importlib >>> import hello Hello, Python! # 修改前的内容 >>> >>> importlib.reload(hello) I am coming... # 修改后的内容 <module 'hello' from '/home/wang/Projects/hello.py'>
相关文章推荐
- Python 也提供了重新加载已加载模块的基本支持
- python重新加载模块的方法有哪些
- python的学习:导入模块路径、重新加载路径、 is ==、深拷贝和浅拷贝
- python的学习:导入模块路径、重新加载路径、 is ==、深拷贝和浅拷贝
- Python 3.X重新加载模块
- Python重新加载模块的实现方法
- c++加载python模块,但是PyImport_ImportModule老返回NULL
- Python单元测试unittest加载方式之一:unittestmain()启动单元测试模块
- python判断模块是直接执行还是加载模块
- 通过源码包php-5.4.9.tar.gz编译安装PHP之后,如何加载动态模块,不需要重新配置PHP
- python 模块加载错误总结
- python技巧31[Python 动态加载模块的3种方法]
- Python 被导入模块多次被加载的问题(基于python的import机制)
- Python学习-4.Python的模块加载(二)
- python模块结构和布局与__name__ 指示模块被加载问题
- Python 动态加载模块的3种方法
- python - 动态加载模块和类
- python模块与包加载机制
- MicroPython 1.8.6重新支持512K的模块
- 动态加载python可执行模块的办法(示例代码)