维护多个 Odoo 版本的代码在 Odoo 开发中很常见,需要整理一下来保持项目在同一台开发机器上并行。改变版本有时会需要上下文的切换。比如,现在 Odoo 的启动执行文件是 odoobin,而在老版本中是 odoo.py。迁移到 Python 3 后又更易混淆了,我们要知道是选择python/pip 还是 python3/pip3,这取决于使用的 Odoo 版本。
Python 有一个在同机器上管理独立环境的工具 virtualenv。每个环境有自己的 Python 可执行文件和库文件,仅需在使用时激活环境,然后 python 和 pip 无需指定就可以在相应的安装了
Python 库的环境下运行。要在 Debian/Ubuntu 上使用 virtualenv,执行如下命令:
sudo apt install virtualenv -y
如果我们使用的工作目录是~/odoo-dev,并把 Odoo 12 源代码克隆到~/odoo-dev/odoo 目录中,我们可以这样进行虚拟环境的创建:
virtualenv -p python3 ~/odoo-dev/odoo12env
source ~/odoo-dev/odoo12env/bin/activate
一旦激活了虚拟环境,我们可以在其中安装 Odoo,可以通过 pip 来进行操作:
pip install -e ~/odoo-dev/odoo
以上代码会将~/odoo-dev/odoo 中的 Odoo 源代码安装到虚拟环境中。-e 参数非常重要,这是一个可编辑安装。它不会复制一份代码到虚拟环境中,仅仅只是保留了一个到原地址 Odoo 代码的引用。因为使用到了源代码,源代码的修改在当前环境中也同样生效。
Odoo 的 Python 依赖会被自动安装,所以无需使用 requirements.txt 来进行手动安装。我们也可以通过 pip 来安装其它所需的 Python 库:
pip install phonenumbers num2words psycopg2-binary watchdog xlwt
注意我们无需记住使用的是 Python 2 还是 Python 3,这里的 pip 命令会指向正确的版本。然后就可以运行 Odoo 了,pip 安装创建了一个 bin/odoo 命令,可在任何位置运行,无需涉及源代码所在目录。
“ 小贴士:如果决定使用虚拟环境,任何要使用 odoo-bin 运行的命令,都可以替换为 odoo”
以下命令会启动并关闭所安装版本 Odoo,打印一些日志信息用于确定 Odoo 版本和使用的插件:
odoo --stop-after-init
推荐的操作是将配置文件放在虚拟环境文件夹中。以下会为我们的项目初始化一个 12-library 数据库,并创建一个对应的 12-library.conf 文件:
odoo -c ~/odoo-dev/odoo12-env/12-library.conf -d 12-library --addonspath=~/odoo-dev/library,~/odoo-dev/odoo/addons --save --stop
自此开始,我们可通过如下命令启动图书项目 Odoo 服务:
odoo -c ~/odoo-dev/odoo12-env/12-library.conf
最后在完成后,通过如下命令来退出环境:
deactivate
假设我们要在同一台机器上使用 Odoo 10 项目,它使用的是 Python 2.7,通过如下命令创建环境、安装 Odoo:
cd ~/odoo-dev
git clone https://github.com/odoo/odoo.git -b 10.0 --depth=1 odoo10
virtualenv odoo10env
source odoo10env/bin/activate
pip install -e ./odoo10
odoo --version
deactivate # To finish working with this env.
要使得在 Odoo 版本间切换更容易,我们可以在~/odoo-dev/odoo10 目录下再为 10.0 分支克隆一份源代码。然后创建虚拟环境,激活环境,使用 pip 创建一个 Odoo 10 可编辑安装。
virtualenv 没有使用-p 参数指定 Python 版本,默认为 Python 2,也就是 Odoo 10 所需的版本。
如果系统中没有 Python 2,Ubuntu 18.04 默认就不带 Python 2,则需要执行如下命令来进行安装:
sudo apt install python-dev
更多教程:https://www.erpdaxue.cn/odoo/odoo-teach/odoo12-teach/