帮助使用setuptools打包Odoo插件库
项目描述
⚠️ 该项目正在逐步弃用。请考虑使用 whool 来打包单个Odoo插件,并使用 hatch-odoo 来构建包含Odoo插件的完整项目。⚠️
setuptools-odoo 是一个帮助使用setuptools打包Odoo插件的库。它主要从Odoo清单文件中填充常用的 setup.py 关键字。
它允许使用标准的Python基础设施(即 setuptools、pip、wheel 和 pypi)来打包和分发Odoo插件。
需求
以下为必备条件
支持Odoo版本8, 9, 10, 11, 12, 13, 14, 15和16(有关实现差异的说明,请参阅文档中的注释)。
要安装此工具打包的插件,任何支持wheel包格式的pip版本都应适用(即pip >= 1.4)。
对于任何高级用途,如从源安装、从git安装、打包wheel等,您需要pip的较新版本(>= 9.0.1)。
最后,如果您使用的是Odoo 8、9或10,您需要安装odoo-autodiscover(pip install odoo-autodiscover)以提供自动扩展插件路径(以及解决setuptools > 31和Odoo 10的bug)。对于Odoo >= 11,odoo-autodiscover不是必需的。
打包单个插件
要与此库打包,插件源代码必须具有以下结构(假设插件名为<addon_name>)
# Odoo >= 11 setup.py odoo/ odoo/addons/ odoo/addons/<addon_name>/ odoo/addons/<addon_name>/__manifest__.py odoo/addons/<addon_name>/... # Odoo 10 setup.py odoo/ odoo/__init__.py odoo/addons/ odoo/addons/__init__.py odoo/addons/<addon_name>/ odoo/addons/<addon_name>/__manifest__.py odoo/addons/<addon_name>/... # Odoo 8, 9 setup.py odoo_addons/ odoo_addons/__init__.py odoo_addons/<addon_name>/ odoo_addons/<addon_name>/__openerp__.py odoo_addons/<addon_name>/...
其中odoo/__init__.py、odoo/addons/__init__.py和odoo_addons/__init__.py是标准的Python命名空间包声明__init__.py(注意Odoo >= 11时不存在__init__.py)
__import__('pkg_resources').declare_namespace(__name__)
而setup.py的内容如下
import setuptools setuptools.setup( setup_requires=['setuptools-odoo'], odoo_addon=True, )
通常的setup()关键字参数会自动从Odoo清单文件(__manifest__.py或__openerp__.py)计算得出,并包含以下内容
name:包名,odoo<series>-addon-<addon_name>
version:清单中的version键
description:如果存在,则为清单中的summary键,否则为清单中的name键
long_description:如果存在,则为README.rst文件的内容,否则为清单中的description键
url:清单中的website键
license:清单中的license键
packages:自动检测的包
namespace_packages:['odoo', 'odoo.addons'](Odoo 10)或['odoo_addons'](Odoo 8、9),Odoo 11不存在
zip_safe:False
include_package_data:True
install_requires:对Odoo、其他插件(除Odoo社区版和企业版插件外,它们由Odoo依赖引入)和Python库的依赖关系。
python_requires
然后,可以使用通常的pip命令部署和打包插件,例如
pip install odoo<8|9|10|11|12|13|14>-addon-<addon name> pip install "git+https://github.com/OCA/<repo>#subdirectory=setup/<addon name>" pip install "git+https://github.com/OCA/<repo>@<branch or reference>#subdirectory=setup/<addon name>" pip install -e . pip wheel . python -m build
当然,强烈建议在虚拟环境中运行。
打包多个插件
打算被其他插件重用或依赖的插件必须单独打包。在为特定客户准备项目时,通常准备一系列插件集合,这些插件不打算被项目之外的插件依赖。setuptools-odoo 提供了帮助您完成此操作的工具。
要与此库一起打包,您的项目必须根据以下结构进行组织
# Odoo >= 11 setup.py odoo/ odoo/addons/ odoo/addons/<addon1_name>/ odoo/addons/<addon1_name>/__manifest__.py odoo/addons/<addon1_name>/... odoo/addons/<addon2_name>/ odoo/addons/<addon2_name>/__manifest__.py odoo/addons/<addon2_name>/... # Odoo 10 setup.py odoo/ odoo/__init__.py odoo/addons/ odoo/addons/__init__.py odoo/addons/<addon1_name>/ odoo/addons/<addon1_name>/__manifest__.py odoo/addons/<addon1_name>/... odoo/addons/<addon2_name>/ odoo/addons/<addon2_name>/__manifest__.py odoo/addons/<addon2_name>/... # Odoo 8, 9 setup.py odoo_addons/ odoo_addons/__init__.py odoo_addons/<addon1_name>/ odoo_addons/<addon1_name>/__openerp__.py odoo_addons/<addon1_name>/... odoo_addons/<addon2_name>/ odoo_addons/<addon2_name>/__openerp__.py odoo_addons/<addon2_name>/...
其中 setup.py 包含以下内容
import setuptools setuptools.setup( name='<your project package name>', version='<your version>', # ...any other setup() keyword setup_requires=['setuptools-odoo'], odoo_addons=True, )
以下 setup() 关键字参数自动从 Odoo 清单文件(__manifest__.py 或 __openerp__.py)计算得出,并包含以下内容
packages:自动检测的包
namespace_packages: ['odoo', 'odoo.addons'](Odoo 10)或 ['odoo_addons'](Odoo 8、9),Python 3 中不存在(Odoo 11 及以后版本)
zip_safe:False
include_package_data:True
install_requires:对 Odoo、不在插件目录中找到的任何依赖插件以及外部 Python 依赖的依赖。
python_requires
安装Odoo CE和EE插件
setuptools-odoo 内置了对 Odoo 社区和企业版本中包含的插件的了解。对这些插件的依赖被视为由 odoo 分发满足。
这意味着 Odoo 必须在您的 Python 环境中 安装。
从 Odoo 8 到 16,安装 Odoo 的一个好方法是在虚拟环境中进行。有多种可能性,但以下 bash 命令应该能让您入门
$ python3 -m venv ./venv
$ source ./venv/bin/activate
(venv) $ python3 -m pip install --upgrade pip wheel
(venv) $ python3 -m pip install -r ./odoo/requirements.txt
(venv) $ python3 -m pip install -e ./odoo
之后,./venv/bin/pip list 将显示 odoo 作为已安装项目的一部分,运行 ./venv/bin/odoo 将使用适当的插件路径启动 Odoo。
如果您需要添加 Odoo 企业插件,可以使用 --addons-path Odoo 选项使它们对 Odoo 可见,或者将它们打包在多插件项目中,然后按照上述方法使用 pip 安装。
控制setuptools-odoo行为
可以使用字典代替 True 为 odoo_addon 和 odoo_addons 关键字,以控制其行为。
支持以下键
depends_override,用于精确控制 Odoo 插件依赖。其值必须是将插件名称映射到包要求字符串的字典。
external_dependencies_override,用于精确控制 Python 外部依赖。其值必须是包含一个 python 键的字典,该键具有将 Python 外部依赖映射到 Python 包要求指定符或指定符列表的字典值。
odoo_version_override,用于指定要使用哪个 Odoo 系列(8.0、9.0、10.0、11.0、……),如果插件版本不以 Odoo 系列数字开头。仅在无法在插件的清单中更正插件版本的情况下,作为最后的手段使用。
post_version_strategy_override,用于指定如何使用 git 提交来修改清单中找到的版本(见下面的 版本控制 部分)。
例如,如果您的模块需要至少版本 10.0.3.2.0 的连接器插件,以及至少版本 0.5.5 的 py-Asterisk,则您的 setup.py 将如下所示
import setuptools setuptools.setup( setup_requires=['setuptools-odoo'], odoo_addon={ 'depends_override': { 'connector': 'odoo10-addon-connector>=10.0.3.2.0', }, 'external_dependencies_override': { 'python': { 'Asterisk': 'py-Asterisk>=0.5.5', 'somepkg': [ 'somepkg<3 ; python_version < "3"', 'somepkg>=3 ; python_version > "3"', ] }, }, }, )
setuptools-odoo-make-default辅助脚本
由于可重用插件通常不是使用命名空间结构化,而是收集在目录中,每个子目录包含一个插件,因此此包提供 setuptools-odoo-make-default 脚本,该脚本根据以下结构为每个插件创建默认的 setup.py
# Odoo >= 11 setup/ setup/addon1/ setup/addon1/setup.py setup/addon1/odoo/ setup/addon1/odoo/addons/ setup/addon1/odoo/addons/<addon1_name> -> ../../../../<addon1_name> setup/addon2/setup.py setup/addon1/odoo/ setup/addon2/odoo/addons/ setup/addon2/odoo/addons/<addon2_name> -> ../../../../<addon2_name> <addon1_name>/ <addon1_name>/__manifest__.py <addon1_name>/... <addon2_name>/ <addon2_name>/__manifest__.py <addon2_name>/... # Odoo 10 setup/ setup/addon1/ setup/addon1/setup.py setup/addon1/odoo/ setup/addon1/odoo/__init__.py setup/addon1/odoo/addons/ setup/addon1/odoo/addons/__init__.py setup/addon1/odoo/addons/<addon1_name> -> ../../../../<addon1_name> setup/addon2/setup.py setup/addon1/odoo/ setup/addon1/odoo/__init__.py setup/addon2/odoo/addons/ setup/addon2/odoo/addons/__init__.py setup/addon2/odoo/addons/<addon2_name> -> ../../../../<addon2_name> <addon1_name>/ <addon1_name>/__manifest__.py <addon1_name>/... <addon2_name>/ <addon2_name>/__manifest__.py <addon2_name>/... # Odoo 8, 9 setup/ setup/addon1/ setup/addon1/setup.py setup/addon1/odoo_addons/ setup/addon1/odoo_addons/__init__.py setup/addon1/odoo_addons/<addon1_name> -> ../../../<addon1_name> setup/addon2/setup.py setup/addon2/odoo_addons/ setup/addon2/odoo_addons/__init__.py setup/addon2/odoo_addons/<addon2_name> -> ../../../<addon2_name> <addon1_name>/ <addon1_name>/__openerp__.py <addon1_name>/... <addon2_name>/ <addon2_name>/__openerp__.py <addon2_name>/...
可用选项
usage: setuptools-odoo-make-default [-h] --addons-dir ADDONS_DIR [--force] [--odoo-version-override ODOO_VERSION_OVERRIDE] [--metapackage METAPACKAGE] [--clean] [--commit] Generate default setup.py for all addons in an Odoo addons directory optional arguments: -h, --help show this help message and exit --addons-dir ADDONS_DIR, -d ADDONS_DIR --force, -f --odoo-version-override ODOO_VERSION_OVERRIDE Force Odoo version for situations where some addons versions do not start with the odoo version. --metapackage METAPACKAGE, -m METAPACKAGE Create a metapackage using the given name. This package depends on all installable addons in ADDONS_DIR. --clean, -c Clean the setup directory: remove setups of uninstallable addons, remove files corresponding to other Odoo versions, remove metapackage setup if there are no installable addons. --commit Git commit changes, if any.
setuptools-odoo-make-default 还可以作为 pre-commit 插件使用。要使用它,您可以在您的 .pre-commit-config.yaml 中添加以下条目
repos:
- repo: https://github.com/acsone/setuptools-odoo
rev: 2.5.2
hooks:
- id: setuptools-odoo-make-default
setuptools-odoo-get-requirements辅助脚本
由于在 Odoo 世界中,通常在仓库根目录下有一个名为 requirements.txt 的文件,因此此脚本有助于从 add-ons 清单中声明的外部依赖项生成它。
usage: setuptools-odoo-get-requirements [-h] [--addons-dir ADDONS_DIR] [--output OUTPUT] Print external python dependencies for all addons in an Odoo addons directory. If dependencies overrides are declared in setup/{addon}/setup.py, they are honored in the output. optional arguments: -h, --help show this help message and exit --addons-dir ADDONS_DIR, -d ADDONS_DIR addons directory (default: .) --output OUTPUT, -o OUTPUT output file (default: stdout) --header HEADER output file header --include-addons Include addons and odoo requirements in addition to python external dependencies (default: false).
版本控制
默认情况下,setuptools-odoo 会尽力检测 add-on 是否与清单中指示的版本有所不同。为此,它探索 add-on 子树的 git 日志。
如果 add-on 的最后更改与清单中的版本号相对应,则将其直接用作 Python 包版本。否则,对于每个提交,计数器都会递增,并且生成的版本号包含该计数器。
默认策略取决于 Odoo 系列。其形式如下,N 表示自版本更改以来的 git 提交数。
策略 .99.devN 是 8 到 12 系列的默认策略,产生 [8|9|10|11|12].0.x.y.z.99.devN。
策略 +1.devN 是 13 和 14 系列的默认策略,产生 [13|14].0.x.y.z+1.devN。
策略 .N 是 15 系列及以后的默认策略,添加一个数字,通常产生 [series].0.x.y.z.N。
策略 none 默认不使用,并禁用后版本化机制,产生在清单中找到的版本。
这些方案符合在 PEP 440 中记录的接受 Python 版本控制方案。
可以使用 post_version_strategy_override 关键字或 SETUPTOOLS_ODOO_POST_VERSION_STRATEGY_OVERRIDE 环境变量来覆盖默认策略。如果设置且不为空,则环境变量比 setup.py 关键字具有优先级。
公共API
setuptools_odoo 软件包公开了临时公共 API。
get_addon_metadata(addon_dir, ...) 返回一个符合 Python 核心元数据规范 的 email.message.Message。
有用的链接
另请参阅 odoo-autodiscover: https://pypi.python.org/pypi/odoo-autodiscover
鸣谢
作者
Stéphane Bidoul (ACSONE)
贡献者
Benjamin Willig
Matteo Bilotta
感谢 Daniel Reis 清晰的路径,以及 Laurent Mignon,他使我确信可以使用标准 Python 打包工具完成它,并提出了 odoo_addons 命名空间包的想法。
变更
3.3 (2024-03-16)
功能
3.2.1 (2023-09-30)
错误修复
修复 FileNotFoundError 回退,在 setuptools-odoo-make-default 中。(#116)
3.2.0 (2023-09-20)
功能
错误修复
使用utf-8编码打开README.rst,以避免在默认编码不是utf-8的平台上的解码问题。(#108)
3.1.12 (2023-03-29)
功能
更新核心插件列表。(#107)
3.1.11 (2023-03-15)
功能
更新核心插件列表。(#106)
3.1.10 (2022-12-28)
功能
更新核心插件列表。(#105)
3.1.9 (2022-11-24)
功能
更新核心插件列表。(#100)
3.1.8 (2022-11-01)
功能
更新核心插件列表。(#97)
3.1.7 (2022-10-16)
功能
更新核心插件列表。(#96)
3.1.6 (2022-10-02)
功能
3.1.5 (2022-09-21)
功能
更新Odoo基础插件列表。
3.1.4 (2022-09-14)
功能
更新Odoo基础插件列表。
3.1.3 (2022-09-01)
错误修复
在setuptools-odoo-makedefault元包生成中正确处理odoo_version_override。(#89)
功能
更新Odoo基础插件列表。
3.1.1 (2022-05-17)
功能
当无法检测Odoo版本时,提供更好的错误信息。(#85)
更新Odoo基础插件列表。
3.1.0 (2022-05-06)
支持使用要求列表覆盖外部依赖,使更高级的使用案例,如声明环境标记成为可能。(#81 <https://github.com/acsone/setuptools-odoo/pull/81>)
初步支持Odoo 16。(#83)
更新Odoo基础插件列表。
3.0.7 (2022-02-26)
setuptools-odoo-get-requirements:修复了使用--include-addons时回归的问题,其中本地目录中的插件被报告为要求。(#67)
更新Odoo基础插件列表。
3.0.6 (2022-01-11)
更新Odoo基础插件列表。
3.0.5 (2021-12-17)
修复读取Odoo >= 15的PKG-INFO元数据的错误。(#70)
3.0.4 (2021-12-04)
更新Odoo基础插件列表。
3.0.3 (2021-10-18)
Odoo 15插件现在默认需要python >= 3.8。(#65)
3.0.2 (2021-10-09)
setuptools-odoo-make-default现在使用新的元包命名方案。(#64)
3.0.1 (2021-10-06)
生成Metada-Version 2.2。由于从包含PKG-INFO的sdist获取的元数据直接从PKG-INFO读取,因此所有元数据按定义是静态的。
向get_addon_metadata添加precomputed_metadata_path参数。
支持Odoo 15,使用新的odoo-addon-{addon_name}包名结构。这利用了新的pip依赖解析器,以正确安装正确的版本,具体取决于已安装的Odoo版本。Odoo 15插件的默认git postversion策略现在为.N,这意味着它在版本号中添加一个第六位数字,该数字表示自上次版本提升以来在插件清单中的提交数。
添加对新的Odoo系列trove类别的支持。
更新Odoo基础插件列表。
2.7.1 (2021-03-15)
setuptools-odoo-get-requirements --include-addons不会输出本地插件,因为它旨在列出第三方依赖。
2.7.0 (2021-03-13)
[ADD] 添加新的.N git post version策略,该策略在版本号中添加一个第六位数字,表示自最新清单版本变更以来的提交数。
[ADD] 实现了文档中但尚未生效的post_version_strategy_override关键字。
[ADD] 允许使用环境变量SETUPTOOLS_ODOO_POST_VERSION_STRATEGY_OVERRIDE覆盖post version策略。
[ADD] 向setuptools-odoo-get-requirements添加--include-addons选项,以输出插件包和Odoo,而不仅仅是Python外部依赖。
[UPD] 更新基础插件列表。
2.6.3 (2021-01-29)
[UPD] 更新基础插件列表。
2.6.2 (2021-01-13)
通过选择PEP 517修复了构建系统。
2.6.1 (未发布)
[UPD] 更新基础插件列表。
2.6.0 (2020-10-21)
[ADD] 支持覆盖post version策略。
[新增] 将setuptools-odoo-get-requirements添加到插件清单中,以提取外部Python依赖项列表
2.5.10 (2020-09-29)
[UPD] 更新基础插件列表。
[新增] 支持Odoo 14
2.5.9 (2020-05-25)
[修复] 进一步避免依赖于损坏的setuptools_scm 4.0.0
2.5.8 (2020-05-25)
[修复] 避免依赖于损坏的setuptools_scm 4.0.0
[UPD] 更新基础插件列表。
2.5.7 (2020-05-07)
[UPD] 更新基础插件列表。
2.5.6 (2020-04-24)
[UPD] 更新基础插件列表。
2.5.5 (2020-03-06)
[UPD] 更新基础插件列表。
2.5.4 (2020-02-16)
[UPD] 更新基础插件列表。
2.5.3 (2020-01-16)
[改进] 更新Odoo 12和13的文档
2.5.2 (2020-01-16)
[UPD] 更新基础插件列表。
[新增] 添加预提交钩子setuptools-odoo-make-default
2.5.1 (2019-12-13)
[修复] 更好地检测git仓库根目录
[UPD] 更新基础插件列表。
2.5.0 (2019-10-04)
[新增] 新的git自动版本化策略(增加最后一位数字而不是追加.99),将用于Odoo 13
[新增] 预先支持Odoo 13
[新增] 为Odoo插件提供新的临时公共API,返回Python包元数据2.1
2.4.1 (2018-11-05)
[修复] make-default-setup元包生成器的问题现在尊重.setuptools-odoo-make-default-ignore
2.4.0 (2018-10-04)
[改进] 更新基础插件列表,包括Odoo 12
2.3.0 (2018-05-13)
[修复] 从sdist中移除测试(它们仅在正确的git克隆中工作)
[改进] 支持development_status清单键以生成相应的pypi类分类器
[改进] 使用pypa/setuptools_scm而不是未维护的setuptools-git作为git文件查找器
2.2.1 (2018-05-08)
[修复] 空目录中make-default-setup –commit的问题
2.2.0 (2018-04-30)
[改进] 在查找git历史中的清单时,静默一些无用的git警告
[改进] 在搜索清单时,先查找__manifest__.py,然后再查找__openerp__.py,这应该略微提高最近Odoo版本中最常见的性能
[改进] 更新Odoo 8、9、10的基础插件列表
[改进] 从资源文件加载基础插件列表,使维护这些列表更容易(使用更新的mk_base_addons脚本)
[新增] 在外部依赖项映射中添加OpenSSL和suds
2.1.0 (2018-04-22)
[修复] 给PKG-INFO优先权以获取版本,这样在生成sdist时获取的git后版本就被保留了(在之前,如果从git之外的sdist构建,将回退到清单版本)
[改进] 更新Odoo 11.0的基础插件列表
2.0.4 (2018-04-18)
[修复] setuptools-odoo-make-default:使元包成为Odoo 11的通用wheel
2.0.3 (2018-04-18)
[改进] 将–clean、–commit和–metapackage选项添加到setuptools-odoo-make-default
2.0.2 (2017-10-07)
[改进] 更新Odoo 11(CE和EE)的基础插件列表
2.0.1 (2017-10-02)
[修复] 修复odoo/addons没有__init__.py时的问题
2.0.0 (2017-09-19)
[改进] 更新Odoo 10.0的基础插件列表
[改进] 当setuptools扩展列表类型的关键字时,防止重复项
[改进] 使用python 3使测试通过
[新增] 预先支持Odoo 11
[重大改进] 移除LEGACY_MODE支持
[重大改进] python_requires现在是生成关键字的一部分
[更改] 在分类器中,使用Python而不是Python :: 2.7,因为我们现在有更精确的python_requires
1.0.1 (2017-04-08)
[新增] 为OCA常用许可证添加许可证分类器
1.0.0 (2017-04-07)
[新增] 支持全新的Framework :: Odoo分类器
1.0.0rc4 (2017-02-21)
[修复] 避免使用setuptools-git版本1.2,因为它对我们的用例已损坏
1.0.0rc3 (2017-01-14)
[修复] 基于git的自动后版本化在清单重命名(例如,将__openerp__.py重命名为__manifest__.py)的情况下不起作用
[改进] 支持作者电子邮件:由于Odoo清单没有此类概念,这目前只是当OCA是作者时的特殊情况
1.0.0rc2 (2016-10-07)
[改进] 10.0插件现在再次依赖于特定的Odoo版本(>=10.0,<10.1dev)
1.0.0rc1 (2016-10-03)
[改进] 支持带有odoo.addons命名空间的插件和Odoo 10.0
[改进] 更新Odoo 9.0和10.0rc1的基础插件列表
1.0.0b7 (2016-09-22)
[改进] 为Odoo 10添加__manifest__.py支持,取消对从未得到Odoo支持的__odoo__.py支持
[重大改进] 包名现在按以下方案构建:odoo{series}-addon-{addon_name},其中series是8、9或10。
1.0.0b6 (2016-08-23)
[改进] 当odoo_addon和odoo_addons关键字在setup.py中存在时,现在它们扩展列表关键字,如install_requires;这对于创建包含Odoo插件以及其他Python包的包很有用
【改进】允许将 None 作为 depends_override 的值,以禁用在 __openerp__.py 中 'depends' 键中存在的插件添加到 setup.py 的 'install_requires' 中
【改进】在存在 odoo_version_override 的情况下,检查 Odoo 版本是否受支持
【新增】初步支持 OpenErp 7.0
【新增】添加 –odoo-version-override 参数给 setuptools-odoo-make-default,用于在无法规范插件版本的情况下使用
【修复】当使用 odoo_version_override 时,确保包版本以 Odoo 版本开头,否则其他包的依赖项将无法工作
【更新】为 odoo 9c 更新基础插件列表,包含最近几个月添加的新模块
1.0.0b5 (2016-05-03)
【修复】修复了先前版本中阻止单个 auto_install 插件打包的 bug
1.0.0b4 (2016-04-06)
【更新】在外部依赖映射中添加 pycrypto
【新增】setuptools-odoo-make-default 现在忽略 .setuptools-odoo-make-default-ignore 列表中列出的插件;这在某些插件手动包含在其他包(如可自动安装的粘合模块)中很有用
【新增】setuptools-odoo-make-default 现在在设置目录的根目录生成 README 和 .setuptools-odoo-make-default-ignore 文件
【改进】odoo_addon 设置关键字现在接受 odoo_addons 命名空间中的多个插件,但必须恰好有一个是可安装的且不是自动安装的。这是为了将一个插件与一个或多个可自动安装的粘合模块一起打包。
1.0.0b3 (2016-02-10)
【新增】指定在依赖项中使用的 Odoo 版本(例如 8.0、9.0)的机制,以防某些要打包的插件具有非标准版本号
【新增】支持在它们的清单中没有版本号的插件(遗憾的是,在野外有一些...)
1.0.0b2 (2016-01-26)
【新增】覆盖依赖项的机制,允许插件作者要求依赖 odoo 插件的最小版本,并控制外部 Python 依赖项
1.0.0b1 (2015-12-29)
【修复】运行在 git 目录之外时修复 postversioning 的问题
【改进】Python 外部依赖项的额外映射
【新增】make_pkg_name 公共 API,用于将插件名称转换为 Python 包名称
【新增】make_pkg_requirement 公共 API,用于获取给定插件的合法包需求(与 make_pkg_name 相同,但包括对正确 Odoo 版本的请求)
【修复】在先前提交有不良 __openerp__.py 的情况下崩溃
0.9.0 (2015-12-13)
第一个测试版
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。