██████ ██████ ██ █████ ██████
██ ██ ██ ██ ██ ██ ██ ██ ██
██ ██ ██ ██ ██ ███████ ██████
██ ██ ██ ██ ██ ██ ██ ██ ██
██████ ██████ ███████ ██ ██ ██████
odoo-lab (oolab)
CLI para crear y gestionar workspaces de desarrollo Odoo multi-proyecto y multi-versión.
Desarrollado por IKU Solutions SAS | Autor: Yan Chirino <yan.chirino@iku.solutions>
¿Qué es oolab?
oolab automatiza la creación y gestión de entornos de desarrollo Odoo. Permite trabajar con múltiples proyectos de clientes en un solo workspace, compartiendo el framework Odoo (Community + Enterprise opcional), con configuraciones de debug individuales por proyecto en VSCode.
Resuelve problemas reales del día a día:
- Múltiples clientes con distintas versiones de Odoo (15, 16, 17, 18, 19, 20)
- Proyectos con estructuras de addons no estándar (
vendor/OCA/,vendor/Cybrosys/,src/, etc.) - Incompatibilidades de paquetes Python en macOS arm64 (psycopg2, cryptography, lxml, gevent)
- Configuración manual repetitiva de
launch.json,odoo.confydocker-compose
Características principales
- Multi-proyecto: gestiona múltiples clientes/tenants en un solo workspace
- Multi-versión: soporte para Odoo 15, 16, 17, 18, 19 y 20 con venvs separados por versión
- Enterprise ready: integra Odoo Enterprise via git o copia local (requiere licencia propia)
- VSCode integrado: genera
launch.jsoncon una entrada de debug por proyecto (F5 → arranca Odoo con sudb-filter) - Gestión de módulos por CLI:
module-install,module-updateyopen-shellcon barra de progreso parseando logs deodoo-binen vivo - Auto-detección de addons: escanea la estructura del proyecto y detecta todos los directorios con módulos Odoo automáticamente, sin importar si están en
src/,vendor/OCA/,vendor/Cybrosys/u otra estructura - Entornos aislados: venvs por versión de Odoo (
.venv-v15,.venv-v19) - Dependencias robustas: instalación con
uv+ compatibilidad automática con macOS arm64 + fallback paquete por paquete - Comando repair: repara workspaces con paquetes Python rotos sin tener que reinicializar
- Docker integrado: comandos
start,stop,logsystatuspara gestionar los servicios del workspace - UX consistente: tema unificado, spinners con tiempo transcurrido, barras de progreso con ETA y logs coloreados por servicio
- Multi-plataforma: compatible con macOS, Linux y Windows
Sobre Odoo Enterprise
oolab permite configurar proyectos que usan Odoo Enterprise, pero no incluye ni distribuye los módulos Enterprise. Para usarlos necesitas:
- Tener una suscripción activa de Odoo Enterprise o ser partner autorizado de Odoo.
- Acceso al repositorio privado
github.com/odoo/enterprise(Odoo otorga acceso con la suscripción), o bien tener una copia local de los módulos Enterprise en tu máquina.
Importante: Los módulos Enterprise están protegidos por la licencia Odoo Enterprise Edition. Consulta los términos de licencia de Odoo antes de usarlos.
Instalación
Requisitos previos
- Python >= 3.10
- git
- Docker + Docker Compose v2
- uv (se instala automáticamente si no existe)
Instalar uv (si no lo tienes)
macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Instalar oolab
uv tool install odoo-lab --python 3.11
O con pipx:
pipx install odoo-lab
Instalar desde el código fuente
git clone https://github.com/ikusolutions/odoo-lab.git
cd odoo-lab
uv tool install -e . --python 3.11
Verificar
oolab --version
Quick Start
# 1. Navega a donde quieres crear el workspace
cd ~/Projects
# 2. Crea el workspace (wizard interactivo)
oolab init
# 3. Entra al workspace creado
cd odoo-launchpad
# 4. Agrega proyectos de clientes
oolab add
# 5. Levanta los servicios y abre en VSCode
oolab start
code .
# Presiona F5 para debuguear
Comandos
Workspace
| Comando | Descripción |
|---|---|
oolab init |
Crea un workspace odoo-launchpad/ con wizard interactivo: clona Odoo, Enterprise (opcional) y configura el entorno |
oolab add [nombre] |
Agrega un proyecto de cliente: clona un repo existente o crea uno nuevo con scaffold OCA |
oolab remove <nombre> |
Elimina un proyecto del workspace y lo quita de oolab.yaml |
oolab list |
Lista los proyectos con su versión de Odoo, branch y estado |
oolab generate |
Regenera odoo.conf, docker-compose, launch.json y demás configs desde oolab.yaml |
oolab repair |
Repara el workspace reinstalando paquetes core (psycopg2, lxml, Pillow) |
oolab repair --full |
Repara reinstalando también todos los requirements.txt |
Servicios Docker
| Comando | Descripción |
|---|---|
oolab start |
Levanta PostgreSQL y Nginx vía Docker Compose |
oolab start --build |
Levanta reconstruyendo imágenes Docker |
oolab stop |
Detiene los servicios Docker |
oolab status |
Muestra el estado: servicios activos, branches y tenants |
oolab logs [servicio] |
Muestra logs de los servicios (db, nginx) coloreados por nivel |
oolab logs -f |
Sigue los logs en tiempo real |
oolab logs -n <N> |
Limita las últimas N líneas (default 50) |
Módulos y base de datos
| Comando | Descripción |
|---|---|
oolab module-install <db> <mods> |
Instala módulos en una DB. Acepta lista coma-separada (sale,purchase) |
oolab module-update <db> <mods> |
Actualiza módulos en una DB. Acepta all para todos |
oolab open-shell <db> |
Abre una shell ORM interactiva contra una DB |
oolab reset-pwd <db> <password> |
Resetea la contraseña del usuario admin (base.user_admin) |
oolab reset-pwd -d <db> -p <pwd> -l <login> |
Cambia también el login del admin |
Atajos comunes: -d/--db, -m/--modules, -p/--password, -l/--login,
-t/--timeout (default 1800s en module-install/module-update).
Estos comandos resuelven automáticamente venv, addons-path y
odoo.conf desde oolab.yaml, matchean el tenant por db_filter o
name, y muestran progreso en vivo parseando los logs de odoo-bin.
Diagnóstico
| Comando | Descripción |
|---|---|
oolab doctor |
Verifica dependencias del sistema (git, Docker, uv, Python) |
oolab --version |
Muestra la versión del CLI |
oolab --help |
Muestra la ayuda general |
oolab <comando> --help |
Muestra la ayuda de un comando específico |
Estructura del workspace
odoo-launchpad/
├── odoo/ # Odoo Community (compartido entre proyectos)
├── enterprise/ # Enterprise addons (opcional, compartido)
├── tenants/
│ ├── cliente-a/ # Proyecto estándar
│ │ └── addons/
│ └── cliente-b/ # Proyecto con estructura vendor
│ ├── src/
│ └── vendor/
│ ├── OCA/
│ └── Cybrosys/
├── config/
│ └── odoo/odoo.conf # Configuración central de Odoo
├── docker/
│ └── docker-compose.yaml
├── .vscode/
│ ├── launch.json # Una entrada de debug por tenant (F5)
│ ├── settings.json
│ └── tasks.json
├── .venv-v15/ # Venv para Odoo 15 (Python 3.10)
├── .venv-v19/ # Venv para Odoo 19 (Python 3.11)
├── .env
└── oolab.yaml # Fuente de verdad del workspace
Auto-detección de addons
oolab escanea automáticamente la estructura del proyecto para encontrar todos los directorios con módulos Odoo (identificados por __manifest__.py o __openerp__.py), hasta 3 niveles de profundidad. Esto cubre estructuras como:
tenants/proyecto/src/ → detectado
tenants/proyecto/vendor/OCA/ → detectado
tenants/proyecto/vendor/Cybrosys/ → detectado
tenants/proyecto/addons/ → detectado
El launch.json generado incluye todos los paths detectados automáticamente. Sin configuración manual.
oolab.yaml
Archivo central de configuración del workspace. Se genera en oolab init y se actualiza con oolab add / oolab remove.
name: odoo-launchpad
python_version: "3.11"
postgres_version: "16"
postgres_port: 5432
postgres_user: odoo
postgres_password: odoo
enterprise_enabled: false
nginx_enabled: true
nginx_http_port: 80
tenants:
- name: cliente-a
display_name: "Cliente A"
url: git@github.com:org/cliente-a.git
branch: "19.0"
db_filter: cliente-a
- name: assenza
display_name: "Assenza"
url: git@github.com:org/assenza.git
branch: "15.0"
db_filter: assenza
enterprise: false
Versiones soportadas
| Versión Odoo | Python | PostgreSQL mínimo |
|---|---|---|
| 15 | 3.10 | 14 |
| 16 | 3.10 | 16 |
| 17 | 3.10 | 16 |
| 18 | 3.11 | 16 |
| 19 | 3.11 | 16 |
| 20 | 3.12 | 16 |
Cada versión usa un venv separado (.venv-v15, .venv-v16, etc.). Los proyectos con la misma versión comparten el venv.
Contribuir
Las contribuciones son bienvenidas. Este es un proyecto open source mantenido por IKU Solutions SAS.
- Fork el repositorio
- Crea tu branch (
git checkout -b feature/mi-feature) - Commit tus cambios siguiendo Conventional Commits
- Abre un Pull Request
Reporta bugs en issues.
Licencia
Este proyecto está licenciado bajo LGPL-3.0-or-later.
Copyright (c) 2026 IKU Solutions SAS
Autor: Yan Chirino <yan.chirino@iku.solutions>
Website: https://www.iku.solutions
Hecho con Python + Typer + Rich por IKU Solutions
Metadata
Release files for odoo-lab 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| odoo_lab-0.5.0.tar.gz | 94.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| odoo_lab-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 151.1 kB
Release files / odoo_lab-0.5.0.tar.gz
| Download URL | odoo_lab-0.5.0.tar.gz |
|---|---|
| Size | 94.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
71187ab21c385f8cb77130158f6ad5fc892b9d195573543706b3a79d795f1cbb
|
|
BLAKE2b-256 checksum How to use checksums |
4d466712fac58884bdf21d75dbf5e88e4c722e11773cc26b5d5ea15075239de5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency logRelease files / odoo_lab-0.5.0-py3-none-any.whl
| Download URL | odoo_lab-0.5.0-py3-none-any.whl |
|---|---|
| Size | 57.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b5620382c606882273220be50a98e87d6b81da74e1dfcc6045ee2a18e6928ecc
|
|
BLAKE2b-256 checksum How to use checksums |
0162d0bf960ddb2ea643ee0ae1821e796ee7b64b5a870f74cc136c571b964249
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency log