Skip to main content

A build backend for Odoo modules supporting multiple versions

Project description

Polytropos

Polytropos logo

Polytropos is a Python build backend for Odoo modules that enables writing code once and using it across multiple Odoo versions.

Features

  • Multi-version support: Write your module once, target multiple Odoo releases
  • Conditional manifests: Configure different manifest values per Odoo version, to let you include or exclude XML files per version (views, assets or other data)
  • Editable installs: Develop in editable mode with full version support
  • 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 = [
    "odoo>=17.0" # Specify supported Odoo versions here
]

[tool.polytropos]
default_odoo_release = "18.0"

# All versions have this data
[[tool.polytropos.manifest]]
depends = ["base"]
data = ["data/views.xml"]

# In Odoo 18+, there are special permissions
[[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 wheels
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 for each version. Polytropos solves this by generating version-specific code at build time, allowing you to maintain a single codebase.

If your product is the combination of Odoo + its release, you probably won't need Polytropos.

If your product are Odoo addons, and you want to provide the same product to your customers regardless of the Odoo version they're running, then you will benefit a lot by Polytropos.

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

polytropos-3.1.0.tar.gz (119.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

polytropos-3.1.0-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

File details

Details for the file polytropos-3.1.0.tar.gz.

File metadata

  • Download URL: polytropos-3.1.0.tar.gz
  • Upload date:
  • Size: 119.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","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}

File hashes

Hashes for polytropos-3.1.0.tar.gz
Algorithm Hash digest
SHA256 9e254eae55ed0bfbfad9c804655371078ac6bfebb5ff2abd40a6c7a79ee60884
MD5 5dc449448e9d5f8b80ddbe3c6b48c281
BLAKE2b-256 a9af4bfbf69e7e5b180625ffb2116aee59db273a7f4e69dee24e1b6f656976a6

See more details on using hashes here.

File details

Details for the file polytropos-3.1.0-py3-none-any.whl.

File metadata

  • Download URL: polytropos-3.1.0-py3-none-any.whl
  • Upload date:
  • Size: 16.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","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}

File hashes

Hashes for polytropos-3.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 be22a7c0d902ffea2c57a9960d3ae85c13223e5ccbf11df69e6d83811ec5562a
MD5 9e9c65e6bfb97f2d274eadaaddd55222
BLAKE2b-256 d8cb2dce7e1ae1ae8389de63bc5772e80f34323ca502a70df68582d17357726c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page