Polytropos
Polytropos is a Python build backend for Odoo modules that enables writing code once and using it across multiple Odoo releases.
Features
- Multi-release support: Write your module once, target multiple Odoo releases
- Conditional manifests: Configure different manifest values per Odoo release, to let you include or exclude data files per release
- Editable installs: Develop in editable is supported
- PEP 517 compliant: Works with any PEP 517 compatible frontend
Quick Example
Replace your module's __manifest__.py with this pyproject.toml file:
[build-system]
requires = ["polytropos[build]"]
build-backend = "polytropos.build"
[project]
name = "odoo-addon-my-module"
version = "1.0.0"
dependencies = [
# Specify supported Odoo versions here
"odoo>=17"
]
# All versions have this data
[[tool.polytropos.manifest]]
depends = ["base"]
data = ["data/views.xml"]
# This section is only for Odoo 18+
[[tool.polytropos.manifest]]
releases = ">=18"
data = ["security/ir.model.access.csv"]
Then, inside the module folder:
# Don't forget the module must be a Python package
touch __init__.py
# Build wheels for different odoo releases
uv build --sdist
uv build --wheel --config-setting odoo_release=17.0
uv build --wheel --config-setting odoo_release=18.0
uv build --wheel --config-setting odoo_release=19.0
# List artifacts
ls -1 dist/
my_module-1.0.0.tar.gz
odoo_addon_my_module-17.0.1.0.0-py3-none-any.whl
odoo_addon_my_module-18.0.1.0.0-py3-none-any.whl
odoo_addon_my_module-19.0.1.0.0-py3-none-any.whl
Single branch, single code, multiple releases! 🤯
Installation
Python will auto-install the build backend when you build a module.
But yes, you can install a small CLI with:
pip install polytropos[cli]
For development, the recommended tool you need is uv. Then:
uvx polytropos[cli] --help-all
Why Polytropos?
Odoo modules traditionally require separate codebases or branches for each release. Polytropos solves this by generating release-specific code at build time, allowing you to maintain a single codebase.
So, it will help you or not depending on your product vision:
| What is your product? | What does that mean? | Is Polytropos for you? |
|---|---|---|
| Odoo + its release + all addons in that release | Customers that want new features must upgrade to newer Odoo releases. | ⛔ No |
| Addons that should work always the same way | Customers need new features and cannot wait for the upgrade to the next Odoo release; but when they upgrade, they expect the same features they have now | ✅ Yes |
Examples
Check out the examples folder for real-world modules with views, models, and tests that exercise the conditional logic.
Credits
Polytropos is developed and maintained by Moduon. Need a professional Odoo partner? Contact us.
Metadata
Release files for polytropos 6.7.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| polytropos-6.7.1.tar.gz | 642.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| polytropos-6.7.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 670.1 kB
Release files / polytropos-6.7.1.tar.gz
| Download URL | polytropos-6.7.1.tar.gz |
|---|---|
| Size | 642.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4618f89c86670e31552c55b0d42b65a6fde403695291db4a38de2a7888726af4
|
|
BLAKE2b-256 checksum How to use checksums |
d5de343342f7b17d1486e51936527eed8e954d57f3c59f7354a3cdd5ec9ea6bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / polytropos-6.7.1-py3-none-any.whl
| Download URL | polytropos-6.7.1-py3-none-any.whl |
|---|---|
| Size | 27.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c99b21139a5ca0d8a257bd8e2238c4d2715657bc3fd51ccd04372a64ec99fc09
|
|
BLAKE2b-256 checksum How to use checksums |
7af64d91b9c6e262694f8f888a01f10ae11ab6410c7175a70167de5c39eff0bd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|