如何在交互式Python环境中导入Odoo/OpenERP插件模块?
我想知道如何在Python的命令行中导入Odoo/OpenERP的插件模块。
我想更深入地了解Odoo的结构。我更喜欢通过IPython来学习,但我不太确定如何在这个环境中导入插件。首先,我只是想把一个默认的插件加载到我的环境中。所以我从默认的产品模块中复制了一行代码。我没有修改源代码中的任何内容。我一直在查找源代码,想知道为什么我不能像在Python中那样简单地导入这个插件。
我的Odoo安装运行得很好。
$ cd /opt/odoo
$ ipython
In [1]: import openerp
In [2]: openerp.modules.module?
[not much luck]
In [3]: openerp.addons?
[not much luck either, nothing here either]
In [4]: import openerp.addons
[no error]
In [5]: import openerp.addons.decimal_precision as dp # Line from addons/product/product.py
[....]
ImportError: No module named decimal_precision
openerp.addons
里面什么都没有,但从Odoo的插件模块中,import openerp.addons.STUFF
却能正常工作。
我感觉addons
需要先初始化,但我还没找到怎么做。我开始查看openerp.main.cli()
的代码。
openerp.tools.config.parse_config()
是朝着正确方向的一步,但还不够。我还需要以某种方式传递--addons-path=addons
(因为Odoo并不能聪明地找到它自己的插件)。
2 个回答
在调用了
openerp.tools.config.parse_config()
之后,插件会在openerp.addons
下可用(这样插件的路径就被知道了)。
所以在进行任何导入之前,你应该先调用openerp.tools.config.parse_config()
。
如果你需要传递任何参数,可以这样做:openerp.tools.config.parse_config(['--addons-path=addons'])
我的建议是你可以使用 Odoo 的 shell
命令:
$ ./odoo.py shell -d <your_db>
这样你会得到一个互动式的命令行,里面有 self
这个东西,就像你在模型方法里一样,不过这里是普通的 Python,而不是 IPython。这个功能在 9.0 版本中可以用,还有一个 社区版本 可以在 8.0 版本上使用。
另一个选择是使用 ERPPeek:这是一个 Python 客户端,可以连接到远程的 Odoo 服务器,能够运行一些互动命令,虽然这些命令和服务器上用的有些不同。这个方法的好处是你不需要在自己这边安装 Odoo,还可以选择用你喜欢的 Python 版本来运行 ERPPeek。