基于依赖关系的python模块重载器

reloader的Python项目详细描述


https://secure.travis-ci.org/jparise/python-reloader.png?branch=master

这个库为python实现了一个基于依赖关系的模块重载器。不像 内置的reload()函数,此重载程序将重新加载请求的 模块和依赖于该模块的所有其他模块。

有关重载程序实现的详细讨论,请参见:

http://www.indelible.org/ink/python-reloading/

用法

重载程序通过跟踪导入模块之间的依赖关系来工作。它必须 首先启用以跟踪这些依赖项。再装料机没有 启用之前导入的模块的依赖关系信息,或 在它被禁用之后,您可能希望在 应用程序的启动过程。

import reloader
reloader.enable()

# Import additional modules
import module1
import module2

要手动重新加载导入的模块,请将其传递给重新加载程序的reload() 方法:

import example
reloader.reload(example)

注意,必须传递模块对象本身,而不是包含 模块的名称。如果只有模块名,则可以获取 来自全局sys.modules字典的模块对象:

reloader.reload(sys.modules['example'])

您还可以查询模块的依赖项以获取信息或进行调试 目的:

reloader.get_dependencies(example)

您可以随时禁用重新加载程序的依赖项跟踪:

reloader.disable()

黑名单模块

有时可能不需要模块及其依赖关系层次结构 被重新装载。该模块可能很少更改,而且导入成本很高。 为了支持这些情况,您可以从 使用blacklist参数将进程重新加载到enable()

reloader.enable(blacklist=['os', 'ConfigParser'])

黑名单可以是任何列出模块完全限定名的列表。 这应该被忽略。注意,黑名单模块仍将出现在 依赖关系图的完整性;它们不会被重新加载。

交互式示例

这个例子演示了从 交互式python解释程序。假设您拥有模块example.py 在文本编辑器中打开,它包含以下内容:

print "I am example.py"

我们的互动会话如下开始:

>>> import reloader
>>> reloader.enable()
>>> import example
I am example.py

现在在文本编辑器中修改example.py。然后您可以重新加载 example在交互式会话中:

>>> reloader.reload(example)
I am the modified example.py

这是一个简单的例子,不能充分证明 Reloader基于依赖关系的模块跟踪,但它希望能够说明 系统的基本用途和实用性。

重新加载回调

如果一个模块有一个__reload__()函数,它将使用 重新加载后的原始模块字典。这提供了 在重新加载之间保持状态的方便机制。

考虑一个名为counts的模块,它包含以下代码:

COUNTER = 0

当模块是 重新加载:

>>> import counts
>>> counts.COUNTER += 1
>>> counts.COUNTER
1
>>> reloader.reload(counts)
>>> counts.COUNTER += 1
1

我们可以通过添加 __reload__()函数到counts模块:

def __reload__(state):
    global COUNTER
    COUNTER = state['COUNTER']

现在当我们重新加载counts

>>> import counts
>>> counts.COUNTER += 1
>>> counts.COUNTER
1
>>> reloader.reload(counts)
>>> counts.COUNTER += 1
>>> counts.COUNTER
2

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java“抹去”了整个swing GUI,只有一个组件例外   有人能解释一下为什么这个用来反转字符串的Java程序不起作用吗?   jar使用java代码发送电子邮件   java如何使用keyRelease连续激发筛选表?   安卓 studio在java中执行lua脚本   java在实现StatefulJob时,“延迟”是什么意思?   当我再次尝试上传时,java Android无法查看保存在新目录中的图像   爪哇岩布剪刀问题只返回一半结果   使用Jersey Rest客户端进行java异步大文件上载   Java日历。加错年份   java对于多个autosize文本视图只有一个大小   java JodaTime:句点、间隔和持续时间之间有什么区别?   java对返回数据的正确处理   多线程多线程在java中打印偶数和奇数?   摆动Java弹跳球移动   httpconnection Java HttpUrlConnection抛出连接被拒绝   寻找C#的XmlConvert的Java等价物。编码名称   jetty在一个cookie Java代码中设置多个值   使用maven构建java jar显示错误   java我可以只使用输入在iText中生成超级脚本吗?