python为什么只能运行一行_为什么Odoo只能运行在 Python2.7

很多朋友都知道Odoo当前版本(9.0)目前不支持Python 3.X。但是,大概并不清楚Odoo 9.0实际上目前只能运行在Python 2.7。

我本来也没有对Python版本的要求有特别关注,因为所有的安装环境都用了最新Python2.7.X。直到最近在客户提供的一台CentOS 6.7的服务器上运行Odoo时才意识到这个要求。并且搞明白了为什么不能运行在CentOS6.7默认安装的Python 2.6环境下。

当按部署要求安装了数据库和所有Python依赖库后,启动Odoo服务器,立即有Syntax Error报错。查看Odoo源文件发现了以下这么几个原因导致了Odoo不能运行在Python 2.6环境下:

Odoo用到了Python 2.7之前的版本不支持的字典解析表达式(dict comprehension)

比如:

{ name: self.to_field(model, field, fromtype)

for name, field in model._fields.iteritems()

}

一个向后兼容的修改是这样的:

dict(

(name, self.to_field(model, field, fromtype))

for name, field in model._fields.iteritems()

)

Odoo用到了Python2.7之前的版本不支持的集合的标注法

比如:

fnames = {field.name}

一个向后兼容的修改是这样的:

fnames = set([field.name])

Odoo用到了Python2.7之前的版本不支持的集合解析表达式 (set comprehension)

比如:

fnames = {fname

for fname, fcolumn in self._columns.iteritems()

if fcolumn._multi == multi

if not fcolumn.groups or self.user_has_groups(fcolumn.groups)

}

一个向后兼容的修改是这样的:

fnames = set(fname

for fname, fcolumn in self._columns.iteritems()

if fcolumn._multi == multi

if not fcolumn.groups or self.user_has_groups(fcolumn.groups)

)

Odoo用到了Python2.7从第三方weakrefset库back port到标准库weakref的weakSet类

比如:

from weakref import weakSet

一个向后兼容的修改是这样的:

try:

from weakref import weakSet

except ImportError:

from weakrefset import weakSet

Odoo用到了Python2.7之前版本不支持的with 表达式写法(一行表示多个嵌套的context manager)

with tools.ignore(Exception), tools.mute_logger('openerp.sql_db'), sql_db.db_connect(dbname, allow_uri=True).cursor() as cr:

一个向后兼容的修改是这样的:

import contextlib

with contextlib.nested(tools.ignore(Exception), tools.mute_logger('openerp.sql_db'), sql_db.db_connect(dbname, allow_uri=True).cursor()) as (_,_,cr):

安装了不支持Python2.6的reportlab

在requirements.txt中对reportlab依赖库的版本要求是 reportlab==3.1.44

而该版本的reportlab不支持Python2.6解决办法:安装支持Python2.6的reportlab 2.7

sudo pip uninstall reportlab

sudo pip install https://pypi.python.org/packages/source/r/reportlab/reportlab-2.7.tar.gz

目前发现的影响Odoo向低版本Python兼容的问题就这些,理论上按上面介绍的方法去修改是可以让Odoo运行在Python2.7以下的版本的。

不过个人私下以为,对低版本Python的支持基本属闲的蛋疼,更靠谱的应该是让Odoo能运行于Py3或pypy,这个就留给强人研究了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值