一个人做 odoo 开发,随意些也无所谓。不过随着时间的推移,项目越来越多,用到的插件也越来越多,再加上团队协作的时候,用到版本控制,眼花缭乱的感觉就来了。

  • 有些插件时间久了,就忘了到底是用来做什么的
  • 同一个数据库中安装太多的插件,时不时的冲突和报错让人很烦恼
  • 不想把版本控制代码和odoo的框架代码分离,不方便调试
  • 希望在同一个 odoo 框架代码中管理不同的项目

虚拟运行环境

特别是在项目开发和管理中,使用 Python 虚拟环境(virtual environment),笔者认为最实用的好处是以下两点:

1. 依赖隔离

虚拟环境允许你在一个独立的环境中安装和管理 Python 包和依赖。每个虚拟环境都有自己独立的 site-packages 目录,因此不同项目的依赖不会互相影响。

如果在不同项目中使用不同版本的库(例如 Django 2.x 和 Django 3.x),虚拟环境可以确保每个项目使用自己需要的版本,不会引起版本冲突。

2. 可移植性

通过在虚拟环境中安装项目的所有依赖项,并保存 requirements.txt 文件,你可以轻松地在不同开发环境之间移植项目。其他开发人员可以通过以下步骤快速搭建相同的开发环境:

1
2
3
4
5
#在激活虚拟环境后,使用以下命令生成 requirements.txt 文件:
pip freeze > requirements.txt

#需要在新的环境中恢复这些依赖时,在该项目的根目录中执行以下命令即可:
pip install -r requirements.txt

代码启动与调试

虽然 windows 有简单快捷的安装方式,但在开发项目的时候,笔者更喜欢将 odoo 源码放在指定的位置,自行启动运行和调试。

1.源码启动运行

激活虚拟环境,安装好框架代码所依赖的包,然后启动 odoo 。为了方便使用,我们直接将这些命令放在 bat 文件中,这样 双击 bat 文件,即可启动运行 odoo ,bat 命令和启动截图如下:

1
2
3
4
5
6
7
8
9
10
11
@echo off
echo dev.gardenengineer.club
echo %date% %time%

REM 激活虚拟环境
call F:\odoo16\odoo16_venv_3.10.11\Scripts\activate

REM 启动Odoo
python odoo-bin -c odoo.conf

REM 停止

2.源码调试

vscode 中的调试配置文件与运行截图如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "odoo_dev",
      "type": "debugpy",
      "request": "launch",
      "python": "F:/odoo16/odoo16_venv_3.10.11/Scripts/python.exe",
      "pythonPath": "F:/odoo16/odoo16_venv_3.10.11/Scripts/python.exe", // 虚拟环境的 Python 可执行文件路径
      "program": "F:/odoo16/dev.gardenengineer.club/odoo-bin",
      "cwd": "F:/odoo16/dev.gardenengineer.club",
      "console": "integratedTerminal",
      "args": ["-c", "F:/odoo16/dev.gardenengineer.club/odoo.conf"],
      "env": {
        "PYTHONPATH": "F:/odoo16/odoo16_venv_3.10.11/Lib/site-packages" // 虚拟环境的路径
      }
    }
  ]
}


项目区分

因为所有的 odoo 项目都集中在一套框架代码中,区分好不同的项目和项目运行后的数据,就会让开发变得更加清晰明了,笔者的处理方式比较简单。

1.代码区分

如上图所示,在 odoo 源码的根目录中创建一个 dev 文件夹,然后在 dev 文件夹中创建 common 文件夹,用来存放各项目公用的插件,可以在 common 文件夹中添加一个说明文档,备注各个插件的简要说明。接下来创建自定义文件夹,用来存放不同的项目源码,对项目进行区分。如果项目需要和其他公用插件配合使用,那么就在清单文件 __manifest__.py 中添加依赖;这样,在项目部署的时候,只需要安装项目插件即可,简化操作。

2.数据区分

为不同的项目创建各自独立的数据库即可。

作者 菜园君