最近很多小伙伴都在问如何在Python中重新加载模块的功能?和如何在python中重新加载模块的功能设置这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展IPython中模块的自动重
最近很多小伙伴都在问如何在Python中重新加载模块的功能?和如何在python中重新加载模块的功能设置这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展IPython中模块的自动重新加载、Python-如何卸载(重新加载)模块?、python3动态加载模块的方法实现、Python动态加载模块的3种方法等相关知识,下面开始了哦!
本文目录一览:- 如何在Python中重新加载模块的功能?(如何在python中重新加载模块的功能设置)
- IPython中模块的自动重新加载
- Python-如何卸载(重新加载)模块?
- python3动态加载模块的方法实现
- Python动态加载模块的3种方法
如何在Python中重新加载模块的功能?(如何在python中重新加载模块的功能设置)
跟进有关重新加载模块的问题,如何从已更改的模块重新加载特定功能?
伪代码:
from foo import bar
if foo.py has changed:
reload bar
IPython中模块的自动重新加载
有没有办法让 IPython 自动重新加载所有更改的代码?在每行在 shell 中执行之前或在特别要求时失败。我正在使用 IPython 和 SciPy
进行大量探索性编程,每当我更改每个模块时都必须手动重新加载它是一件很痛苦的事情。
Python-如何卸载(重新加载)模块?
如何解决Python-如何卸载(重新加载)模块??
你可以使用reload内置函数重新加载已导入的模块:
from importlib import reload # Python 3.4+ only.
import foo
while True:
# Do some things.
if is_changed(foo):
foo = reload(foo)
在Python 3中,reload
已移至imp模块。在3.4中,imp
不推荐使用importlib,而reload
在中添加了。当定位到3或更高版本时,在调用reload或导入时参考相应的模块。
我认为这就是你想要的。诸如Django开发服务器之类的Web服务器都使用此服务器,这样你就可以看到代码更改的效果,而无需重新启动服务器进程本身。
引用文档:
重新编译python模块的代码并重新执行模块级代码,从而定义了一组新对象,这些对象绑定到模块字典中的名称。扩展模块的init
函数不会被第二次调用。与Python中的所有其他对象一样,旧对象仅在其引用计数降至零后才被回收。模块名称空间中的名称将更新为指向任何新的或更改的对象。对旧对象的其他引用(例如模块外部的名称)不会反弹以引用新对象,并且如果需要的话,必须在出现它们的每个命名空间中进行更新。
正如你在问题中指出的那样,Foo
如果Foo
类驻留在foo
模块中,则必须重构对象。
解决方法
我有一台运行时间较长的Python服务器,并且希望能够在不重新启动服务器的情况下升级服务。最好的方法是什么?
if foo.py has changed:
unimport foo <-- How do I do this?
import foo
myfoo = foo.Foo()
python3动态加载模块的方法实现
需求
我们有时写了一个功能,需要不断地调整,但是已经在线上了,而且在执行任务, 这时要更新上去源文件,而不能结束掉当前进程,怎么办?
所以这时,我们需要动态地加载py文件了. 实现示例代码方式如下:
while 1:
if "UI.fun" in sys.modules:
del(sys.modules["UI.fun"])
exec("import UI.fun")
UI.fun.echo("aa")
time.sleep(2)
解释相关的技巧
sys.modules
里面有所有已经加载了的模块的名称,所以我们要先删除这个模块 exec("import UI.fun")
再执行加载的动作
Python动态加载模块的3种方法
1、使用系统函数__import_()
stringmodule = __import__('string')
2、使用imp 模块
import imp
stringmodule = imp.load_module('string',*imp.find_module('string'))