如何在同一机器运行Odoo 10与11.0并指定对应Python版本
搞定Odoo版本与Python版本不匹配的运行报错问题
问题拆解
你遇到的核心问题其实很明确:Odoo 11已经彻底放弃了Python 2支持,必须用Python 3.5+运行,但你的服务器可能默认用Python 2.7来启动Odoo 11了。
先理清楚版本对应关系:
- Odoo 10:官方推荐用Python 2.7,也兼容3.4+
- Odoo 11:只支持Python 3.5及以上,完全不兼容Python 2的语法(比如你用的
print'Test Print'这种Python 2写法,在Python 3里会直接报错,因为print已经是必须加括号的函数了)
你本地运行正常,是因为本地启动Odoo 11时自动调用了Python 3解释器,而服务器上python命令默认指向2.7,启动Odoo 11时用错了解释器,才导致语法报错。
具体解决办法
1. 启动时直接指定Python版本(快速临时解决)
启动不同版本的Odoo时,明确指定对应的Python解释器:
- 启动Odoo 10(用Python 2.7):
python /你的Odoo10路径/odoo-bin -c /你的Odoo10配置文件路径/odoo10.conf - 启动Odoo 11(必须用Python 3):
python3 /你的Odoo11路径/odoo-bin -c /你的Odoo11配置文件路径/odoo11.conf
2. 用虚拟环境隔离(长期稳定方案,强烈推荐)
为每个Odoo版本创建独立的Python虚拟环境,彻底杜绝版本冲突:
- 给Odoo 10搭Python 2.7虚拟环境:
# 创建虚拟环境目录 virtualenv -p python2.7 odoo10-env # 激活虚拟环境 source odoo10-env/bin/activate # 安装Odoo10需要的所有依赖 pip install -r /你的Odoo10路径/requirements.txt # 启动Odoo10 python /你的Odoo10路径/odoo-bin -c /你的Odoo10配置文件路径/odoo10.conf # 用完退出虚拟环境 deactivate - 给Odoo 11搭Python 3.5虚拟环境:
# 创建Python3虚拟环境 python3 -m venv odoo11-env # 激活虚拟环境 source odoo11-env/bin/activate # 安装Odoo11依赖 pip install -r /你的Odoo11路径/requirements.txt # 启动Odoo11 python /你的Odoo11路径/odoo-bin -c /你的Odoo11配置文件路径/odoo11.conf # 退出虚拟环境 deactivate
3. 配置systemd服务(服务器常驻运行场景)
如果你的服务器用systemd管理Odoo服务,直接修改服务配置文件指定Python解释器:
比如Odoo11的服务文件/etc/systemd/system/odoo11.service,修改ExecStart行:
[Unit] Description=Odoo 11 Instance After=postgresql.target [Service] Type=simple User=odoo Group=odoo # 这里明确用python3启动 ExecStart=/usr/bin/python3 /你的Odoo11路径/odoo-bin -c /你的Odoo11配置文件路径/odoo11.conf Restart=always [Install] WantedBy=multi-user.target
然后重载配置并重启服务:
systemctl daemon-reload systemctl restart odoo11
额外提醒
- 检查你的Odoo 11代码:把所有Python 2的语法改成Python 3的,比如
print加括号、xrange换成range、字符串编码处理适配Python 3规范,避免后续再出类似问题。 - 确保服务器Python 3环境的依赖完整:Odoo11需要的
psycopg2-binary、lxml、reportlab这些库,要在Python 3环境下正确安装,不然可能会报依赖缺失的错误。
内容的提问来源于stack exchange,提问作者KbiR
相关产品推荐
相关产品推荐

