基于依赖关系的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 JavaFX TableView更新单元格,不更新对象值   在扫描器中使用分隔符的java   java OkHttp 4.9.2,连接无法重用,导致端口耗尽   eclipse中的c JNI:运行Java代码   java是否在出厂的所有硬件设备中都有/mnt/sdcard/Android/data文件夹(或等效文件夹)?   Java,在eclipse中访问资源文件夹中的图像   java为什么Bluemix dashDB操作抛出SqlSyntaxErrorException,SQLCODE=1667?   JavaHtmlUnitWebClient。getPage不处理javascript   Google API认证的java问题   java如何将JSON数组反序列化为Apache beam PCollection<javaObject>   ServerSocket停止接收命令,java/安卓   来自Java类的安卓 Toast消息   java如何自动重新加载应用程序引擎开发服务器?   java是否可以尝试/捕获一些东西来检查是否抛出了异常?   java如何做到这一点当我按下load game时,它不仅会加载信息,还会将您带到游戏中?   Java选项Xmx代表什么?   Java映射,它在插入时打印值   设置“ulimit c unlimited”后,java无法生成系统核心转储