在开发Python代码时,我通常在解释器中以特殊的方式测试它。我将import some_module
,测试它,找到一个bug,修复bug并保存,然后使用内置的reload
函数reload(some_module)
并再次测试。
但是,假设在some_module
中有import some_other_module
,并且在测试some_module
时,我发现some_other_module
中有一个错误并修复它。现在调用reload(some_module)
不会递归地重新导入some_other_module
。我必须手动重新导入依赖项(通过执行类似于reload(some_module.some_other_module)
,或import some_other_module; reload(some_other_module)
的操作),或者,如果我更改了一大堆依赖项,并且忘记了需要重新加载的内容,则需要重新启动整个解释器。
更方便的是,如果有一些recursive_reload
函数,我可以做recursive_reload(some_module)
,让Python不仅重新加载some_module
,而且递归地重新加载some_module
导入的每个模块(以及每个模块导入的每个模块,所以我可以确定我没有使用some_module
依赖的任何其他模块的旧版本。
我不认为Python中内置了任何类似于我在这里描述的recursive_reload
函数的功能,但是有没有一种简单的方法可以将这样的东西组合在一起呢?
我反对同一个问题,我已经建立了@Mattew和@osa的答案。
有三个不同点:
编写一些测试用例,并在每次修改模块时运行它们,这难道不是更简单吗?
你所做的很酷(你本质上是在使用TDD(测试驱动开发),但是你做的不对。
考虑一下,通过编写单元测试(使用默认的pythonunittest模块,或者更好的是使用nose),您可以得到可重用的测试,比在交互环境中测试模块更快、更好地检测代码中的不一致性。
我遇到了同样的问题,你激励我去解决这个问题。
或者,如果您使用的是IPython,只需在启动时使用
dreload
或pass--deep-reload
。相关问题 更多 >
编程相关推荐