如何在交互式Python环境中导入Odoo/OpenERP插件模块?

3 投票
2 回答
6009 浏览
提问于 2025-04-18 13:15

我想知道如何在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 个回答

1

根据openerp的源代码

在调用了openerp.tools.config.parse_config()之后,插件会在openerp.addons下可用(这样插件的路径就被知道了)。

所以在进行任何导入之前,你应该先调用openerp.tools.config.parse_config()

如果你需要传递任何参数,可以这样做:openerp.tools.config.parse_config(['--addons-path=addons'])

3

我的建议是你可以使用 Odoo 的 shell 命令:

$ ./odoo.py shell -d <your_db>

这样你会得到一个互动式的命令行,里面有 self 这个东西,就像你在模型方法里一样,不过这里是普通的 Python,而不是 IPython。这个功能在 9.0 版本中可以用,还有一个 社区版本 可以在 8.0 版本上使用。

另一个选择是使用 ERPPeek:这是一个 Python 客户端,可以连接到远程的 Odoo 服务器,能够运行一些互动命令,虽然这些命令和服务器上用的有些不同。这个方法的好处是你不需要在自己这边安装 Odoo,还可以选择用你喜欢的 Python 版本来运行 ERPPeek。

撰写回答