更新Python3:(引用 alreadyread-answer ,因为最后一个编辑/评论在这里建议了一个已弃用的方法)
在Python 3中,reload
被移动到 imp
模块.在3.4中,imp
被弃用,支持 importlib
和 reload
被添加到后者中.当选择目标3或以后,在调用reload
或导入它时引用适当的模块.
起飞:
- python3> = 3.4:
importlib.reload(packagename)
- python3<3.4:
imp.reload(packagename)
- python2:继续下面
使用reload
builtin函数:
https://docs.python.org/2/library/functions.html#reload
当执行reload(module)
时:
- Python模块代码被重新编译并重新执行模块级代码,定义了一组绑定到模块字典中名称的新对象.扩展模块的init函数不是第二次调用.
- 与 Python 中的所有其他对象一样,旧对象只有在其引用计数降至 0 之后才能再生。
- 模块名称空间中的名称被更新,以指向任何新的或更改的对象。
- 对旧对象的其他引用(例如模块外部的名称)不会反弹引用新对象,如果需要,必须在每个名称空间中更新。
例:
# Make a simple function that prints "version 1"
shell1$ echo 'def x(): print "version 1"' > mymodule.py
# Run the module
shell2$ python
>>> import mymodule
>>> mymodule.x()
version 1
# Change mymodule to print "version 2" (without exiting the python REPL)
shell2$ echo 'def x(): print "version 2"' > mymodule.py
# Back in that same python session
>>> reload(mymodule)
<module 'mymodule' from 'mymodule.pyc'>
>>> mymodule.x()
version 2