Skip to main content

Polytropos

Polytropos logo

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
uv build --wheel --config-setting odoo_release=20.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
odoo_addon_my_module-20.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

Moduon logo

Polytropos is developed and maintained by Moduon. Need a professional Odoo partner? Contact us.

Metadata

Release files for polytropos 6.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for polytropos 6.9.0
File Size Uploaded Provenance
polytropos-6.9.0.tar.gz 801.1 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for polytropos 6.9.0
File Interpreter ABI Platform
polytropos-6.9.0-py3-none-any.whl Python 3 none any Details

Total release size: 831.3 kB

Release files / polytropos-6.9.0.tar.gz

Download URL polytropos-6.9.0.tar.gz
Size 801.1 kB
Tags Source
SHA-256 checksum
How to use checksums
b816aaea39f3a785c148554ffda6ee626ef9c43390d7dd2484850d0434a7e45c
BLAKE2b-256 checksum
How to use checksums
08828448b2b73d8191cd64aa7c1ba3b7d13765d874cd9628feb9b7274cc894b3
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.9.0-py3-none-any.whl

Download URL polytropos-6.9.0-py3-none-any.whl
Size 30.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
00e36e66effc12c57fe81a850cbcc43bf86c32bb3bd510e6ce4f792894e0af37
BLAKE2b-256 checksum
How to use checksums
b27eb1f364c574ecfe8128ed24c7ba9d0dc136bb7e2af11742c63b1f4722d651
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}

Security for polytropos 6.9.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page