A command-line tool to spin up isolated Odoo dev environment in seconds.
Project description
odoo-venv
A command-line tool to spin up isolated Odoo dev environment in seconds.
Installation
pip install odoo-venv
Quick Start
1. Direct CLI Arguments
Example:
odoo-venv create 17.0 \
--odoo-dir ~/code/odoo/odoo/17.0 \
--addons-path ~/code/odoo/addons/web,~/code/odoo/addons/mail \
--python-version 3.10 \
--install-addons-dirs-requirements \
--extra-requirement "debugpy,ipython"
This command creates a virtual environment for Odoo 17.0 with the following specifications:
- Odoo source is located at
~/code/odoo/odoo/17.0. - Additional addons are in
~/code/odoo/addons/weband~/code/odoo/addons/mail. - The environment uses Python 3.10.
- It installs dependencies from
requirements.txtfiles found in the addons paths. - It also installs
debugpyandipython.
2. Using Presets
The tool includes 4 built-in presets: local, demo, project, ci (see odoo_venv/assets/presets.toml)
Example:
odoo-venv create 17.0 \
--odoo-dir ~/code/odoo/odoo/17.0 \
--addons-path ~/code/odoo/addons/web,~/code/odoo/addons/mail \
--preset demo
This command will apply all the options from the demo preset. You can still override any preset option by providing a direct CLI argument. For example, to use a different extra_requirement for a specific run:
odoo-venv create 17.0 \
--odoo-dir ~/code/odoo/odoo/17.0 \
--addons-path ~/code/odoo/addons/web,~/code/odoo/addons/mail \
--preset demo \
--extra-requirement "pylint"
3. As a Library
The tool can also be used as lib in a custom python script
Example:
from odoo_venv import create_odoo_venv
create_odoo_venv(
odoo_version="17.0",
odoo_dir="~/code/odoo/odoo/17.0",
venv_dir="./.venv",
python_version="3.10",
addons_paths=["~/code/odoo/addons/web", "~/code/odoo/addons/mail"],
install_addons_dirs_requirements=True,
extra_requirements=["debugpy", "ipython"],
)
ovx — on-the-fly module runner
ovx is a companion command that runs an Odoo addon instantly — like npx/uvx for Odoo. It detects the required Odoo series from the addon's __manifest__.py, finds or creates a matching venv, installs any missing Python dependencies, and launches Odoo with -i <module>. The database is ephemeral by default and is dropped on exit.
Multiple addons can be passed as a comma-separated list. The first addon's manifest decides the Odoo series; mismatched modules will fail at Odoo's module-not-found error. Paths containing commas are not supported.
# Auto-discover a matching venv in the current directory:
ovx ./crm_eav_fields
# Run multiple addons in a single ephemeral DB:
ovx ./module_a,~/oca/module_b
# Explicit venv:
ovx ./crm_eav_fields --venv-dir ~/code/foo/.venv
# Fresh-create a venv (requires Odoo source):
ovx ./crm_eav_fields --odoo-dir ~/code/odoo/19.0
# Named, persistent database (not dropped on exit):
ovx ./crm_eav_fields -d my_dev_db
# Pass extra arguments through to Odoo:
ovx ./crm_eav_fields -- --log-level=debug --workers 0
# Extra addons paths (e.g. enterprise/OCA) merged with the venv's stored addons_path:
ovx ./my-addon --odoo-dir ~/odoo --addons-path ~/enterprise,~/oca/server-tools
--addons-pathaccepts a comma-separated list of extra paths. They are merged with the venv's storedaddons_pathand the addon's own parent directory (deduped, order preserved). When no venv is found and a fresh one is created, the paths are also passed tocreate_odoo_venvso Python deps declared in enterprise/OCA manifests are installed during venv build.
Venv resolution priority
| Priority | Condition | Outcome |
|---|---|---|
| 1 | --venv-dir provided |
Use it; error if Odoo version mismatches |
| 2 | Exactly one venv found under CWD matching the addon's series | Use it |
| 3 | Multiple matches | Error — pass --venv-dir to disambiguate |
| 4 | No match, --odoo-dir provided |
Create a fresh venv |
| 5 | No match, no --odoo-dir |
Error |
Database lifecycle
By default ovx generates a unique ephemeral DB name (ovx_<joined_modules>_<hex8>) and drops it when Odoo exits — even on Ctrl-C or non-zero exit. Pass -d <name> to use a named, persistent database instead (no automatic create or drop).
Development
To test with a clean state (no cached packages):
uv cache clean --force
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file odoo_venv-1.24.0.tar.gz.
File metadata
- Download URL: odoo_venv-1.24.0.tar.gz
- Upload date:
- Size: 56.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
55a0da0a4cf3490bece2dd121d7864480f9f25e3e0a6812ecc30ddf552fc8622
|
|
| MD5 |
57aa1b4482b052bf5bce18ab47e8f2fa
|
|
| BLAKE2b-256 |
7fc06ff2d170b5b06845c2ba0d3da81e7255a8fa58146e2891cf2ef42bb2b18f
|
Provenance
The following attestation bundles were made for odoo_venv-1.24.0.tar.gz:
Publisher:
release.yaml on trobz/odoo-venv
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
odoo_venv-1.24.0.tar.gz -
Subject digest:
55a0da0a4cf3490bece2dd121d7864480f9f25e3e0a6812ecc30ddf552fc8622 - Sigstore transparency entry: 1754888973
- Sigstore integration time:
-
Permalink:
trobz/odoo-venv@24f3b54c1dbb7d5ea6fab522b4c1ca718e9482cd -
Branch / Tag:
refs/heads/main - Owner: https://github.com/trobz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@24f3b54c1dbb7d5ea6fab522b4c1ca718e9482cd -
Trigger Event:
push
-
Statement type:
File details
Details for the file odoo_venv-1.24.0-py3-none-any.whl.
File metadata
- Download URL: odoo_venv-1.24.0-py3-none-any.whl
- Upload date:
- Size: 60.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae89d32437c9a43a037738dc992d7d998d047b44af603a7479b6a709cef071c1
|
|
| MD5 |
1ff257c0bea5134e2e52aa2b3c4eae11
|
|
| BLAKE2b-256 |
d5c0d54fd998e860c9a009a1642c41e2477026344777d7ebc6e88f2ab497ff40
|
Provenance
The following attestation bundles were made for odoo_venv-1.24.0-py3-none-any.whl:
Publisher:
release.yaml on trobz/odoo-venv
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
odoo_venv-1.24.0-py3-none-any.whl -
Subject digest:
ae89d32437c9a43a037738dc992d7d998d047b44af603a7479b6a709cef071c1 - Sigstore transparency entry: 1754888997
- Sigstore integration time:
-
Permalink:
trobz/odoo-venv@24f3b54c1dbb7d5ea6fab522b4c1ca718e9482cd -
Branch / Tag:
refs/heads/main - Owner: https://github.com/trobz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@24f3b54c1dbb7d5ea6fab522b4c1ca718e9482cd -
Trigger Event:
push
-
Statement type: