Automatically detect and construct Odoo addons_path for various project layouts.
Different Odoo project frameworks use different directory structures:
- Trobz, Camptocamp, Odoo.sh, Doodba each have unique layouts
- Manual configuration is error-prone and time-consuming
- Developers need consistent
addons_pathacross team projects
odoo-addons-path auto-detects your project layout and generates the correct configuration:
$ odoo-addons-path /home/project
/home/project/odoo/addons,/home/project/addons/repo1,/home/project/addons/repo2pip install odoo-addons-path# Auto-detect layout (detector runs)
odoo-addons-path /path/to/your/odoo/project
# With verbose output (categorized paths)
odoo-addons-path /path/to/project --verbose
# Manual addon paths - detector SKIPPED (uses explicit path only)
odoo-addons-path /path/to/project --addons-dir "./addons/*/18.0, ./custom"
# Manual Odoo path - detector SKIPPED (uses explicit path only)
odoo-addons-path /path/to/project --odoo-dir /opt/odoo
# Both explicit - detector SKIPPED (uses both paths)
odoo-addons-path /path/to/project --odoo-dir /opt/odoo --addons-dir "./custom"
# Use environment variable with auto-detection
export CODEBASE=/home/project
odoo-addons-pathDetector Skip Behavior: Detector is skipped if ANY explicit path is provided (--addons-dir or --odoo-dir). This ensures predictable behavior with explicit configuration.
from pathlib import Path
from odoo_addons_path import get_addons_path
# Auto-detect layout
paths = get_addons_path(Path("/path/to/project"))
print(paths)
# Output: /path/to/project/addons,/path/to/project/enterprise
# With options
paths = get_addons_path(
codebase=Path("/home/project"),
addons_dir=[Path("/home/project/custom")],
verbose=True
)Auto-detects these Odoo project organizational patterns:
| Layout | Marker | Detection | Status |
|---|---|---|---|
| Trobz | .trobz/ directory |
Explicit marker | ✓ Supported |
| Camptocamp (C2C) | Dockerfile with label | File content | ✓ Supported |
| Odoo.sh | 4-dir structure | Directory check | ✓ Supported |
| Doodba | .copier-answers.yml |
YAML config | ✓ Supported |
| Generic | Any __manifest__.py |
Recursive search | ✓ Fallback |
See tests/data/ directory for layout examples.
- Zero Configuration: Works out-of-the-box for standard layouts
- Multiple Interfaces: CLI tool and Python library
- Flexible Input: Glob patterns, comma-separated paths, environment variables
- Type Safe: Full Python type hints
- Well Tested: 5 real-world layout patterns covered
- Production Ready: Used in multiple Odoo teams
- Project Overview & PDR - Vision, goals, and requirements
- System Architecture - Design patterns and data flow
- Code Standards - Development guidelines and conventions
- Codebase Summary - Module structure and components
- Deployment Guide - Release and deployment procedures
- Contributing - How to contribute to the project
uv sync
uv run pre-commit install# Single version
make test
# All supported versions (3.10-3.13)
tox
# Quality checks
make checkReleases are automated via semantic versioning on merge to main:
git commit -m "feat: add new feature" # Creates MINOR version
git commit -m "fix: bug fix" # Creates PATCH version
git commit -m "feat!: breaking change" # Creates MAJOR version- Python 3.10+
- pyyaml
- typer >= 0.19.2
v1.0.0 - Stable release (Nov 25, 2025)
See CHANGELOG.md for version history.