OpenERP python 代码开发周期是编辑你的代码,重启服务器并测试它。 重新启动服务器是必要的,因为它会使您的源代码重新加载到内存中,但它会增加您工作节奏的恼人延迟。
既然python是一种动态语言,我想知道是否有一种方法可以强制正在运行的python解释器(应用服务器)动态重新加载代码模块,这样就可以在不重新启动应用服务器的情况下对其进行测试?
更新:
按照@ecatmur 建议的 reload
路径,我得到了下面的代码,但它仍然不起作用:
class module(osv.osv):
_inherit = "ir.module.module"
def action_reload(self, cr, uid, ids, context=None):
for obj in self.browse(cr, uid, ids, context=context):
modulename = 'openerp.addons.' + obj.name
tmp = __import__(modulename)
pycfile = tmp.__file__
modulepath = string.replace(pycfile, ".pyc", ".py")
code=open(modulepath, 'rU').read()
compile(code, modulename, "exec")
execfile(modulepath)
reload( sys.modules[modulename] )
openerp.modules.registry.RegistryManager.delete(cr.dbname)
openerp.modules.registry.RegistryManager.new(cr.dbname)
最佳答案
reload
内置函数将重新加载单个模块。有多种解决方案可以递归地重新加载更新的包;见 How to re import an updated package while in Python Interpreter?
部分问题是需要调整现有对象以从重新加载的模块中引用新类等; reimport做得相当好。在 IPython 交互式控制台中,我使用 autoreload扩展,虽然它不是为在 IPython 之外使用而设计的。
关于python - 强制 python 解释器重新加载代码模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12597164/