关于 odev
供开发者在 Odoo 升级工作中使用 `odev`(Odoo Development CLI)的指引技能,说明数据库操作、测试、部署和模块版本更新的命令规则与注意事项。
主要功能
- 01`odev` 命令使用规则
- 02数据库创建与清理指南
- 03定向运行测试
- 04运行与部署验证
- 05模块清单版本管理
适用场景
- 01为升级创建 Odoo 数据库
- 02针对模块运行特定测试
- 03用 `odev run` 或 `odev deploy` 验证更改
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ odoo-ps/ ps-ai-skills --skill odev安装后在 Claude Code 中输入/odev确认已加载。
详细介绍
ODEV Commands Skill
此 Skill 提供升级任务期间使用 odev(Odoo Development CLI)的说明。
🛑 强制规则(ODEV CLI 用法)
-
版本:创建数据库(
odev create)时,必须使用-V <version>标志明确指定 Odoo 版本。对于odev run、odev shell或odev test等其他命令,如果数据库已存在,-V标志为可选项,因为odev会自动从数据库推断版本。但如果目标版本与数据库版本不同,或数据库不存在,则必须指定-V。- 示例:
odev run -V 19.0 ...
- 示例:
-
参数顺序:
odev专用标志(如-V、-f、-c、-w、--venv)必须放在数据库名称之前。 -
创建/覆盖数据库:创建可能已存在的数据库时,必须始终使用
-f(force)标志,以跳过确认提示。通过odev create“覆盖”现有数据库时,必须使用-f。- 示例:
odev create -f -V 18.0 new_db -i base
- 示例:
-
日志级别:使用
--log-level=warn,以精简日志并节省 Token。请注意,odev会使用此标志同时设置自身和 Odoo 服务端的日志级别。 -
Glob 引号:使用
--glob时,必须始终用双引号括住模式,防止 Shell 在模式传递给odev之前展开它。- 错误示例:
odev upgrade-code --glob my_module/**/* - 强制要求:使用
odev run或odev deploy进行验证时,必须始终包含--stop-after-init。否则 Shell 会一直挂起。
- 错误示例:
-
附加模块路径:
odev会根据指定的版本(-V)自动管理 Odoo 和 Enterprise 附加模块路径。切勿手动指定标准 Odoo 路径(如odoo/addons或enterprise)。odev会在内部处理这些路径。此外,odev会自动包含目标数据库所在的仓库路径。如果你在自定义文件夹中工作,odev通常会在检测到该文件夹是附加模块路径时将其包含在内。相信odev会处理这些配置,避免版本不匹配。
核心命令
-
odev run <database> [options]:- 启动 Odoo 服务器。
- 适用于手动验证和测试。
- 数据库必须存在:数据库必须已存在,否则会抛出错误。
- 版本管理:如果省略
-V <version>,odev会从数据库中读取版本。 - 必须遵守:在脚本中运行或进行自动化验证时,始终指定
--stop-after-init。 - 最佳实践:始终指定
--http-port <free_port>,以避免冲突。 - 示例:
odev run db -i mod --http-port 8069 --log-level=warn --stop-after-init
-
odev create -V <version> <database> [options]:- 创建新数据库并安装模块。
- 必须遵守:创建新数据库时,必须始终使用
-V <version>指定 Odoo 版本。 - 必须遵守:如果数据库已存在,使用
-f强制创建。 - 使用
-T创建模板数据库(例如,odev create -f -T -V 17.0 my_template -i sale)。 - 使用
-t <template>从模板克隆(例如,odev create -f -t my_template -V 17.0 new_db)。
-
odev test <database> -i <modules> [options]:- 针对性验证:鼓励使用此命令验证单项修复,但必须使用特定标签以缩短运行时间。
- 必须遵守:必须使用
-t <tag>或--tags <tag>,仅运行相关的失败测试。 - 示例:
odev test my_db -i my_module -t .test_some_method - 避免运行完整测试套件:不要在未指定标签的情况下运行
odev test。完整的模块测试耗时过长,也会消耗过多令牌。宿主框架会在会话结束后自动运行完整测试套件。
-
odev venv <database> -c "<command>":- 在与数据库关联的虚拟环境中运行命令。
- 安装软件包:如果缺少 Python 软件包,请使用:
odev venv <database> -c "pip install <package>"。
-
odev shell <database> [options]:- 为指定数据库启动交互式 Odoo shell。
- 使用
--script "<python_code>"执行代码并立即退出。 - 示例:
odev shell my_db --script "print(self.env.user.name)"
-
odev deploy <module_path> [options]:- 将模块热部署到正在运行的 Odoo 实例。
- 示例:
odev deploy /custom/my_module
-
odev kill -H <database> [options]:- 终止与数据库关联的正在运行的 Odoo 进程。
- 如果进程卡住,使用
-H(强制)发送 SIGKILL。 - 示例:
odev kill my_db
-
odev delete -f <database> [options]:- 删除现有数据库及其关联资源(文件存储、配置)。
- 必须遵守:使用
-f(强制)跳过确认提示。 - 前提条件:如果数据库当前正在运行,必须先使用
odev kill <database>终止进程。 - 示例:
odev delete -f my_db
-
odev upgrade-code <database> --from <ver> --to <ver>:- 自动迁移源代码以适配常见的重命名(例如,Odoo 18.0 及更高版本中的
<tree>到<list>)。 - 必须遵守:必须指定目标数据库名称,而非目录路径。
- 自动迁移源代码以适配常见的重命名(例如,Odoo 18.0 及更高版本中的
最佳实践
- 加快迭代:使用模板数据库(
-T和-t),避免反复重新安装标准 Odoo 模块。 - 严格管理版本:创建数据库时传入
-V标志。对于其他命令,只有在需要指定不同于数据库默认版本的版本时才使用它。 - 跳过提示:在脚本或自动化任务中始终使用
-f,确保执行不会因交互式提示而受阻。
📦 模块清单规范
- 版本号:将模块升级到新的 Odoo 版本时,必须将
__manifest__.py中的版本重置为ODOO_VERSION.1.0.0(例如,19.0.1.0.0)。- 绝不可保留源 Odoo 版本中的次要版本号或补丁版本号(例如,不要将
16.3.1.2.3改为19.3.1.2.3)。 - 首次升级提交的格式必须为:
<odoo_major>.0.1.0.0。
- 绝不可保留源 Odoo 版本中的次要版本号或补丁版本号(例如,不要将