python - 强制 python 解释器重新加载代码模块

标签 python openerp

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/

相关文章:

openerp - Odoo-默认为用户启用开发者模式

python - 在猎鹰中添加自定义 HTTP 方法?

Python 相当于 perl vec() 函数

python - pyMySQL:如何检查连接是否已经打开或关闭

translation - 如何翻译 OpenERP 模块?

xml - 如何在 ODOO 中添加 Google map 链接?

python - 迭代文件行并保持计数器的最简单方法是什么?

python - 将 json 转储到 yaml

python - 标签字段问题 - OpenErp