Odoo中正确处理外部依赖

在模块开发中,我们往往会引入第三方的python模块。比如当我们在对业务数据做统计分析时,可能会用到pandas Python函数库。在开发者这边我们可以安装pandas包,然后就可以在Odoo模块代码中导入pandas包中的函数,类等:

 from pandas import DataFrame

这样操作,开发者本地往往没有问题。但是如果这个Odoo模块独立发布出去,客户拿来一安装,服务器立即吐一堆的错误信息,如下面的import错误,因为客户并不知道需要先安装pandas

...
...
ImportError: No module named pandas

怎么样在安装模块时能友好的提醒用户安装需要的Python函数包,而不是丢一堆错误信息给用户呢?

解决方法:

首先在import的时候,做try...except,比如:

try:
    from pandas import DataFrame
except ImportError:
    pass

然后在Odoo模块的__manifest__.py文件中添加external_dependencies说明,比如:

"external_dependencies": {
    'python': ['pandas'],
    'bin': ['ffmpeg']
},

其中python key 对应的是python函数包,比如这里就是要求安装pandas函数包。另外这里还有一个bin key,它对应的则是外部命令,比如上例中的ffmpeg就是Linux下著名的视频/图片处理命令。