
1. Requisitos previos por sistema operativo
1.1 Linux — Debian / Ubuntu
Versiones recomendadas:
- Odoo <= 16.0: Debian 11 (Bullseye), Debian 12 (Bookworm), Ubuntu 20.04, Ubuntu 22.04
- Odoo >= 17.0: Debian 12 (Bookworm), Debian 13 (Trixie), Ubuntu 22.04, Ubuntu 24.04
- Odoo 19.0: Debian 13 (Trixie), Ubuntu 24.04 (recomendado, porque trae Python 3.12)
Odoo.sh (la plataforma oficial de Odoo) trabaja sobre Debian, por lo que Debian es la distribución de referencia.
Debian 12 (Bookworm) — Python 3.11
sudo apt update && sudo apt upgrade -y
sudo apt install -y \
git python3.11 python3.11-dev python3.11-venv python3-pip \
libpq-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \
libjpeg-dev zlib1g-dev libfreetype6-dev wkhtmltopdf build-essential wget
Debian 13 (Trixie) — Python 3.12
sudo apt update && sudo apt upgrade -y
sudo apt install -y \
git python3.12 python3.12-dev python3.12-venv python3-pip \
libpq-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \
libjpeg-dev zlib1g-dev libfreetype6-dev wkhtmltopdf build-essential wget
Ubuntu 22.04 (Jammy) — Python 3.10
sudo apt update && sudo apt upgrade -y
sudo apt install -y \
git python3.10 python3.10-dev python3.10-venv python3-pip \
libpq-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \
libjpeg-dev zlib1g-dev libfreetype6-dev wkhtmltopdf build-essential wget
Ubuntu 24.04 (Noble) — Python 3.12
sudo apt update && sudo apt upgrade -y
sudo apt install -y \
git python3.12 python3.12-dev python3.12-venv python3-pip \
libpq-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \
libjpeg-dev zlib1g-dev libfreetype6-dev wkhtmltopdf build-essential wget
1.2 macOS
# Instalar Homebrew (si no está instalado)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Instalar dependencias
brew install python@3.12 postgresql git libxml2 libxslt jpeg libpng freetype wkhtmltopdf
brew services start postgresql
1.3 Windows (WSL)
Versión recomendada: Ubuntu 24.04 LTS (incluye Python 3.12). Ubuntu 22.04 LTS termina su soporte en menos de un año, por lo que se recomienda Ubuntu 24.04 para instalaciones nuevas.
1.3.1 Preparar Windows para WSL
Paso 1: habilitar la Plataforma de máquina virtual (requerido para WSL2)
El componente «Plataforma de máquina virtual» debe estar habilitado en Windows para que WSL2 funcione.
- Abrir Panel de control > Programas > Activar o desactivar las características de Windows
- Buscar y marcar Plataforma de máquina virtual
- Reiniciar el equipo
Si no se habilita, al ejecutar wsl --install se producirá el siguiente error:
WSL2 no se puede iniciar porque la virtualización no está habilitada en esta máquina.
Código de error: Wsl/InstallDistro/Service/RegisterDistro/CreateVm/HCS/HCS_E_HYPERV_NOT_INSTALLED
Paso 2: activar la virtualización en la BIOS (si aplica)
Si la Plataforma de máquina virtual ya está habilitada pero el error persiste, hay que activar la virtualización en la BIOS/UEFI del equipo:
- Reiniciar el equipo y entrar en la BIOS (normalmente con F2, F10 o Supr)
- Buscar la sección CPU o Advanced
- Activar Intel VT-x (Intel) o AMD-V (AMD)
- Guardar y reiniciar
Nota: en máquinas virtuales (Proxmox, VMware, VirtualBox), la virtualización anidada debe estar habilitada en la configuración de la VM.
Paso 3: instalar WSL
Abrir PowerShell como administrador y ejecutar:
# Actualizar WSL a la última versión
wsl --update
# Reiniciar WSL
wsl --shutdown
# Ver las distribuciones disponibles
wsl --list --online
Paso 4: instalar Ubuntu 24.04
wsl --install -d Ubuntu-24.04
Si el nombre exacto no funciona, listar las distribuciones disponibles:
wsl --list --online
Ejemplo de salida:
NAME FRIENDLY NAME
Ubuntu Ubuntu
Ubuntu-26.04 Ubuntu 26.04 LTS
Ubuntu-24.04 Ubuntu 24.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
Durante la instalación se pedirá crear un usuario y una contraseña:
Create a default Unix user account: fernando
New password:
Retype new password:
Paso 5: configurar el acceso SSH desde el host Windows (opcional)
Para acceder a la instancia WSL desde otras máquinas de la red local:
Desde dentro de Ubuntu (WSL):
sudo apt update && sudo apt install -y openssh-server
sudo systemctl start ssh
sudo systemctl status ssh
Desde PowerShell (como administrador), obtener la IP de WSL:
wsl hostname -I
# Ejemplo: 172.27.215.137
Configurar el reenvío de puertos en Windows para redirigir el tráfico SSH a WSL:
# Redirigir el puerto 2222 del host al puerto 22 de WSL
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=172.27.215.137
# Crear una regla de firewall que permita el puerto 2222
New-NetFirewallRule -DisplayName "WSL SSH 2222" -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow
Importante: la IP de WSL puede cambiar después de un reinicio. Ejecutar
wsl hostname -Ide nuevo si la conexión falla.
Conectar desde otra máquina:
ssh fernando@192.168.1.83 -p 2222
1.3.2 Instalar dependencias dentro de WSL (Ubuntu 24.04)
Una vez dentro de Ubuntu (WSL):
sudo apt update && sudo apt upgrade -y
sudo apt install -y \
git python3.12 python3.12-dev python3.12-venv python3-pip \
libpq-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \
libjpeg-dev zlib1g-dev libfreetype6-dev wkhtmltopdf build-essential wget
2. Crear el usuario de sistema odoo
El usuario odoo se usa para ejecutar el servicio con privilegios mínimos.
2.1 Linux (Debian/Ubuntu)
# Crear el usuario odoo con su directorio home en /opt/odoo
sudo useradd -m -d /opt/odoo -U -r -s /bin/bash odoo
# Añadirlo al grupo postgres (para acceso directo a la base de datos)
sudo usermod -aG postgres odoo
# Añadirlo a sudoers (opcional, para mantenimiento)
echo "odoo ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/odoo
2.2 macOS
# Crear el usuario odoo
sudo dscl . -create /Users/odoo
sudo dscl . -create /Users/odoo UserShell /bin/bash
sudo dscl . -create /Users/odoo RealName "Odoo Service"
sudo dscl . -create /Users/odoo UniqueID 1100
sudo dscl . -create /Users/odoo PrimaryGroupID 1000
sudo dscl . -create /Users/odoo NFSHomeDirectory /opt/odoo
sudo dscl . -append /Groups/admin GroupMembership odoo
# Crear el directorio home
sudo mkdir -p /opt/odoo
sudo chown odoo:admin /opt/odoo
3. Instalar PostgreSQL
3.1 Linux (Debian/Ubuntu)
sudo apt install -y postgresql
sudo systemctl enable postgresql
sudo systemctl start postgresql
3.2 macOS
brew install postgresql@15
brew services start postgresql@15
3.3 Windows (WSL)
Igual que en Linux: PostgreSQL se instala dentro de WSL.
3.4 Crear el usuario de PostgreSQL para Odoo
# Crear el rol de PostgreSQL (sin privilegios de superusuario)
sudo -u postgres createuser --createdb --no-superuser --no-createrole odoo
Importante: el usuario de PostgreSQL NO debe ser superusuario en producción. Solo necesita CREATEDB para crear bases de datos.
4. Instalar Python y el entorno virtual
4.1 Comprobar la versión de Python
python3 --version
4.2 Crear el entorno virtual
# Cambiar al usuario odoo
sudo su - odoo
# Crear el directorio de trabajo
mkdir -p /opt/odoo
cd /opt/odoo
# Crear el entorno virtual (usar la versión de Python instalada)
python3 -m venv /opt/odoo/odoo-venv
# Activar el entorno virtual
source /opt/odoo/odoo-venv/bin/activate
# Actualizar pip
pip install --upgrade pip
4.3 Versiones de Python compatibles con cada versión de Odoo
| Versión de Odoo | Python recomendado | Notas |
|---|---|---|
| 14.0 | 3.6 – 3.9 | |
| 15.0 | 3.8 – 3.10 | |
| 16.0 | 3.10 | No usar 3.12 (incompatibilidades con las dependencias) |
| 17.0 | 3.10 – 3.11 | |
| 18.0 | 3.10 – 3.12 | |
| 19.0 | 3.11 – 3.12 |
Fuente oficial: odoo.com/documentation/18.0/administration/on_premise/source.html
5. Descargar el código de Odoo y los addons OCA con git-aggregator
5.1 Instalar git-aggregator
# Con el entorno virtual activado
pip install git-aggregator
5.2 Crear repos.yaml
Crear el archivo /opt/odoo/repos.yaml con los repositorios que se van a clonar. Sustituir 18.0 por la rama de Odoo que se quiera instalar.
Estructura básica (ejemplo para Odoo 18.0):
/opt/odoo/odoo:
remotes:
origin: https://github.com/odoo/odoo.git
merges:
- origin 18.0
target: origin 18.0
depth: 1
/opt/odoo/addons/account-analytic:
remotes:
origin: https://github.com/OCA/account-analytic.git
merges:
- origin 18.0
target: origin 18.0
depth: 1
/opt/odoo/addons/account-financial-tools:
remotes:
origin: https://github.com/OCA/account-financial-tools.git
merges:
- origin 18.0
target: origin 18.0
depth: 1
/opt/odoo/addons/account-invoicing:
remotes:
origin: https://github.com/OCA/account-invoicing.git
merges:
- origin 18.0
target: origin 18.0
depth: 1
/opt/odoo/addons/l10n-spain:
remotes:
origin: https://github.com/OCA/l10n-spain.git
merges:
- origin 18.0
target: origin 18.0
depth: 1
/opt/odoo/addons/server-tools:
remotes:
origin: https://github.com/OCA/server-tools.git
merges:
- origin 18.0
target: origin 18.0
depth: 1
/opt/odoo/addons/web:
remotes:
origin: https://github.com/OCA/web.git
merges:
- origin 18.0
target: origin 18.0
depth: 1
Estructura para Odoo 16.0 (cambiar la rama a 16.0):
/opt/odoo/odoo:
remotes:
origin: https://github.com/odoo/odoo.git
merges:
- origin 16.0
target: origin 16.0
depth: 1
/opt/odoo/addons/l10n-spain:
remotes:
origin: https://github.com/OCA/l10n-spain.git
merges:
- origin 16.0
target: origin 16.0
depth: 1
La clave
depth: 1hace un clonado superficial (shallow clone) que solo descarga el último commit de la rama, lo que reduce mucho el tiempo de descarga y el espacio en disco.
Repositorios OCA populares: el catálogo completo está en github.com/OCA
5.3 Ejecutar git-aggregator
# Con el entorno virtual activado y como usuario odoo
cd /opt/odoo
gitaggregate -c /opt/odoo/repos.yaml
5.4 Estructura resultante
/opt/odoo/
├── repos.yaml # Configuración de git-aggregator
├── odoo-venv/ # Entorno virtual de Python
├── odoo/ # Código fuente de Odoo (clonado por git-aggregator)
│ ├── odoo-bin
│ ├── addons/ # Módulos core de Odoo
│ └── ...
├── addons/ # Repositorios OCA (clonados por git-aggregator)
│ ├── l10n-spain/
│ │ ├── l10n_es/
│ │ ├── l10n_es_aeat/
│ │ └── requirements.txt
│ ├── account-financial-tools/
│ └── ...
├── conf/ # Archivos de configuración
│ └── odoo.conf
├── data/ # Datos de Odoo (filestore, sesiones)
└── scripts/ # Scripts de arranque
└── odoo-launcher.sh
6. Instalar las dependencias de Python
6.1 Dependencias del core de Odoo
# Con el entorno virtual activado
pip install -r /opt/odoo/odoo/requirements.txt
6.2 Dependencias de los repositorios OCA
# Buscar e instalar automáticamente todos los requirements.txt de los addons OCA
find /opt/odoo/addons -maxdepth 2 -name requirements.txt -exec \
/opt/odoo/odoo-venv/bin/pip install --quiet -r {} \; 2>&1 | tail -20 || true
Qué hace: la búsqueda recorre los repositorios OCA de
/opt/odoo/addons/con una profundidad máxima de 2 niveles (raíz del repositorio más un subdirectorio), localiza cadarequirements.txty ejecutapip installsobre él. El|| trueevita que el script falle si algún repositorio no tiene requirements.txt. Se usa profundidad 2 porque los repos OCA guardan su requirements.txt en la raíz del repositorio o en un subdirectorio directo.
6.3 Dependencias adicionales recomendadas
pip install \
phonenumbers \
num2words \
PyPDF2 \
python-stdnum \
pytz \
requests \
simplejson \
vatnumber \
vcard \
openpyxl \
xlsxwriter
6.4 Dependencias de sistema para los informes PDF
# Linux (Debian/Ubuntu) - wkhtmltopdf viene en los repositorios oficiales
sudo apt install -y wkhtmltopdf
# macOS
brew install wkhtmltopdf
# Comprobar la instalación
wkhtmltopdf --version
Versión recomendada de wkhtmltopdf: 0.12.6.1 o superior. Consultar la tabla de compatibilidad de la sección 12.
7. Configurar Odoo
7.1 Crear los directorios
sudo mkdir -p /opt/odoo/conf
sudo mkdir -p /opt/odoo/data
sudo chown -R odoo:odoo /opt/odoo/conf /opt/odoo/data
7.2 Crear el archivo odoo.conf
cat > /opt/odoo/conf/odoo.conf << 'EOF'
[options]
; Conexión a PostgreSQL
db_host = localhost
db_port = 5432
db_user = odoo
db_password = False
; Contraseña del administrador (cambiar en producción)
admin_passwd = admin
; Directorios
addons_path = /opt/odoo/odoo/addons,/opt/odoo/addons
data_dir = /opt/odoo/data
; Configuración de red
proxy_mode = False
; Configuración de workers (0 = threading, N = prefork)
workers = 0
max_cron_threads = 1
; Límites de memoria (en bytes, solo aplica con workers > 0)
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_request = 8192
limit_time_cpu = 60
limit_time_real = 120
; Datos de demostración (False = sin datos de demostración)
without_demo = False
; Base de datos
db_template = template1
EOF
7.3 Asignar permisos según el sistema operativo
Linux (Debian/Ubuntu)
sudo chown odoo:odoo /opt/odoo/conf/odoo.conf
sudo chmod 640 /opt/odoo/conf/odoo.conf
macOS
sudo chown odoo:admin /opt/odoo/conf/odoo.conf
sudo chmod 640 /opt/odoo/conf/odoo.conf
Sobre
data_dir: este parámetro define dónde guarda Odoo el filestore (los archivos adjuntos), las sesiones, la caché y otros datos temporales. En esta configuración apunta a/opt/odoo/data.
8. Lanzador con addons_path dinámico
El lanzador construye --addons-path sobre la marcha escaneando los repositorios clonados en /opt/odoo/addons/ e incluyendo solo los directorios que contienen módulos de verdad (los que tienen __manifest__.py). Así, añadir o quitar repositorios con git-aggregator nunca obliga a editar a mano el archivo de configuración.
8.1 Crear el script del lanzador
cat > /opt/odoo/scripts/odoo-launcher.sh << 'LAUNCHER'
#!/bin/bash
set -e
ODOO_BIN="/opt/odoo/odoo/odoo-bin"
ODOO_CONF="/opt/odoo/conf/odoo.conf"
PYTHON="/opt/odoo/odoo-venv/bin/python3"
ADDONS_BASE="/opt/odoo/odoo/addons"
ADDONS_OCA="/opt/odoo/addons"
ADDONS_PATH="${ADDONS_BASE}"
if [ -d "${ADDONS_OCA}" ]; then
for dir in "${ADDONS_OCA}"/*/; do
if [ -d "$dir" ]; then
if find "$dir" -maxdepth 2 -name __manifest__.py -print -quit 2>/dev/null | grep -q .; then
ADDONS_PATH="${ADDONS_PATH},${dir%/}"
fi
fi
done
fi
if [ "$1" = "shell" ]; then
shift
exec "${PYTHON}" "${ODOO_BIN}" shell \
--config="${ODOO_CONF}" \
--addons-path="${ADDONS_PATH}" \
"$@"
elif [ "$1" = "init" ]; then
DB=${2:-odoo}
shift 2
exec "${PYTHON}" "${ODOO_BIN}" \
--config="${ODOO_CONF}" \
--addons-path="${ADDONS_PATH}" \
-d "${DB}" -i base --stop-after-init --no-http --workers=0 \
"$@"
else
exec "${PYTHON}" "${ODOO_BIN}" \
--config="${ODOO_CONF}" \
--addons-path="${ADDONS_PATH}" \
"$@"
fi
LAUNCHER
chmod +x /opt/odoo/scripts/odoo-launcher.sh
8.2 Usar el lanzador
# Iniciar Odoo normalmente
/opt/odoo/scripts/odoo-launcher.sh --http-port=8069
# Abrir el shell de Odoo
/opt/odoo/scripts/odoo-launcher.sh shell
# Crear la base de datos inicial
/opt/odoo/scripts/odoo-launcher.sh init mi_base_de_datos
9. Arrancar Odoo
9.1 Modo desarrollo (directamente)
# Cambiar al usuario odoo
sudo su - odoo
# Arrancar con el lanzador dinámico (usa él mismo el intérprete del venv)
/opt/odoo/scripts/odoo-launcher.sh --http-port=8069
9.2 Crear la base de datos inicial
# En el navegador, acceder a:
# http://localhost:8069/web/database/manager
# O desde la línea de comandos:
/opt/odoo/scripts/odoo-launcher.sh init mi_base_de_datos
9.3 Servicio systemd (producción)
cat > /tmp/odoo.service << 'EOF'
[Unit]
Description=Odoo 18.0
After=network.target postgresql.service
[Service]
Type=simple
SyslogIdentifier=odoo
PermissionsStartOnly=true
User=odoo
Group=odoo
ExecStart=/opt/odoo/scripts/odoo-launcher.sh
StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
EOF
sudo cp /tmp/odoo.service /etc/systemd/system/odoo.service
# Habilitar e iniciar
sudo systemctl daemon-reload
sudo systemctl enable odoo
sudo systemctl start odoo
# Ver los registros
sudo journalctl -u odoo -f
10. Tabla de compatibilidad por versión
| Versión | Python | PostgreSQL | Debian | Ubuntu | wkhtmltopdf | Notas |
|---|---|---|---|---|---|---|
| 14.0 | 3.6-3.9 | 10-14 | 11 | 18.04-20.04 | 0.12.5 | |
| 15.0 | 3.8-3.10 | 10-14 | 11-12 | 20.04-22.04 | 0.12.5 | |
| 16.0 | 3.10 | 12-15 | 12 | 22.04 | 0.12.6.1 | No usar Python 3.12 |
| 17.0 | 3.10-3.11 | 12-15 | 12 | 22.04-24.04 | 0.12.6.1 | |
| 18.0 | 3.10-3.12 | 12-16 | 12-13 | 22.04-24.04 | 0.12.6.1 | |
| 19.0 | 3.11-3.12 | 14-16 | 13 | 24.04 | 0.12.6.1 |
Fuente: las tablas de compatibilidad del propio fabricante en odoo.com/documentation/18.0/administration/on_premise/packages.html
11. Tablas de dependencias por versión
Fuente: análisis directo de los archivos
requirements.txtdel repositorio oficial de Odoo (github.com/odoo/odoo) en cada rama. Los valores son las versiones exactas que Odoo instala por defecto. Los valores en negrita son fijaciones críticas que NO deben cambiarse.
11.1 Odoo 16.0 (Python 3.10, Ubuntu 22.04 Jammy)
| Paquete | Versión | Notas |
|---|---|---|
| Babel | 2.9.1 | |
| chardet | 4.0.0 | |
| cryptography | 3.4.8 | No usar >= 37.0 en Python < 3.12 |
| decorator | 4.4.2 | |
| docutils | 0.16 | |
| ebaysdk | 2.1.5 | |
| freezegun | 0.3.15 | |
| gevent | 22.10.2 | Solo para Python > 3.10 y < 3.12 |
| greenlet | 2.0.2 | Solo para Python > 3.10 y < 3.12 |
| idna | 2.10 | |
| Jinja2 | 3.1.2 | Para Python > 3.10 |
| libsass | 0.20.1 | Para Python < 3.12 |
| lxml | 4.9.3 | Para Python > 3.10 y < 3.12 |
| MarkupSafe | 2.1.2 | Para Python > 3.10 y < 3.12 |
| num2words | 0.5.9 | |
| ofxparse | 0.21 | |
| passlib | 1.7.4 | |
| Pillow | 9.4.0 | Para Python > 3.10 y < 3.12 |
| polib | 1.1.0 | |
| psutil | 5.9.4 | Para Python > 3.10 y < 3.12 |
| psycopg2 | 2.9.5 | Para Python >= 3.11 y < 3.12 |
| PyDot | 1.4.2 | |
| pyparsing | 2.4.7 | |
| pyserial | 3.5 | |
| python-dateutil | 2.8.2 | |
| python-stdnum | 1.17 | |
| pytz | 2022.7 | |
| qrcode | 7.4.2 | |
| reportlab | 3.6.12 | |
| requests | 2.28.2 | |
| rjsmin | 1.0.1 | |
| simplejson | 3.19.1 | |
| six | 1.16.0 | |
| urllib3 | 1.26.5 | |
| vobject | 0.9.6.1 | |
| Werkzeug | 2.0.2 | No usar >= 2.1 |
| xlrd | 2.0.1 | |
| xlwt | 1.3.0 | |
| xlsxwriter | 3.0.3 | |
| xlwings | 0.29.12 | Solo Windows |
11.2 Odoo 18.0 (Python 3.10-3.12, Ubuntu 22.04 / 24.04)
| Paquete | Versión (Py 3.10) | Versión (Py >= 3.12) | Notas |
|---|---|---|---|
| Babel | 2.9.1 | 2.9.1 | |
| chardet | 4.0.0 | 4.0.0 | |
| cryptography | 3.4.8 | 42.0.8 | |
| decorator | 4.4.2 | 4.4.2 | |
| docutils | 0.17 | 0.20.1 | |
| freezegun | 0.3.15 | 0.3.15 | |
| gevent | 21.8.0 | 24.2.1 | |
| greenlet | 1.1.2 | 3.0.3 | |
| idna | 2.10 | 2.10 | |
| Jinja2 | 2.11.3 | 3.1.2 | |
| libsass | 0.20.1 | 0.22.0 | |
| lxml | 4.6.5 | 5.2.1 | |
| MarkupSafe | 1.1.1 | 2.1.5 | |
| num2words | 0.5.12 | 0.5.12 | |
| ofxparse | 0.21 | 0.21 | |
| passlib | 1.7.4 | 1.7.4 | |
| Pillow | 9.0.1 | 10.2.0 | |
| polib | 1.1.0 | 1.1.0 | |
| psutil | 5.8.0 | 5.9.8 | |
| psycopg2 | 2.9.2 | 2.9.9 | |
| PyPDF2 | 3.0.1 | 3.0.1 | |
| PySocks | 1.7.1 | 1.7.1 | |
| python-dateutil | 2.8.2 | 2.9.0 | |
| python-stdnum | 1.17 | 1.17 | |
| pytz | 2022.7 | 2024.1 | |
| qrcode | 7.4.2 | 7.4.2 | |
| reportlab | 4.0.8 | 4.1.0 | |
| requests | 2.31.0 | 2.31.0 | |
| rjsmin | 1.2.0 | 1.2.0 | |
| simplejson | 3.19.2 | 3.19.2 | |
| urllib3 | 2.0.7 | 2.2.2 | |
| vobject | 0.9.6.1 | 0.9.6.1 | |
| Werkzeug | 2.3.8 | 3.0.6 | |
| xlrd | 2.0.1 | 2.0.1 | |
| xlsxwriter | 3.1.9 | 3.1.9 | |
| xlwings | 0.29.12 | 0.30.10 | Solo Windows |
| zeep | 4.2.1 | 4.2.1 |
11.3 Odoo 19.0 (Python 3.11-3.12, Debian 13 / Ubuntu 24.04)
| Paquete | Versión | Notas |
|---|---|---|
| Babel | 2.15.0 | |
| chardet | 4.0.0 | |
| cryptography | 43.0.3 | |
| decorator | 4.4.2 | |
| docutils | 0.21.1 | |
| gevent | 24.11.1 | |
| greenlet | 3.1.1 | |
| Jinja2 | 3.1.4 | |
| lxml | 5.3.0 | |
| MarkupSafe | 2.1.5 | |
| num2words | 0.5.13 | |
| passlib | 1.7.4 | |
| Pillow | 10.4.0 | |
| polib | 1.2.0 | |
| psutil | 5.9.8 | |
| psycopg2 | 2.9.9 | |
| PyPDF2 | 3.0.1 | |
| python-dateutil | 2.9.0 | |
| python-stdnum | 1.17 | |
| pytz | 2024.2 | |
| qrcode | 7.4.2 | |
| reportlab | 4.2.2 | |
| requests | 2.32.3 | |
| rjsmin | 1.2.0 | |
| simplejson | 3.19.2 | |
| Werkzeug | 3.1.3 | |
| xlrd | 2.0.1 | |
| xlsxwriter | 3.2.0 |
12. Tabla de wkhtmltopdf por distribución
| Distribución | Paquete apt | Versión incluida | Versión recomendada |
|---|---|---|---|
| Debian 11 (Bullseye) | wkhtmltopdf | 0.12.6-1 | 0.12.6-1 |
| Debian 12 (Bookworm) | wkhtmltopdf | 0.12.6-2+b1 | 0.12.6-2+b1 |
| Debian 13 (Trixie) | wkhtmltopdf | 0.12.6-2+b1 | 0.12.6-2+b1 |
| Ubuntu 20.04 (Focal) | wkhtmltopdf | 0.12.5-1 | 0.12.5-1 |
| Ubuntu 22.04 (Jammy) | wkhtmltopdf | 0.12.6.1-2 | 0.12.6.1-2 (recomendada) |
| Ubuntu 24.04 (Noble) | wkhtmltopdf | 0.12.6.1-2 | 0.12.6.1-2 (recomendada) |
12.1 Instalación manual (cuando la versión del repositorio no basta)
Descargar desde github.com/wkhtmltopdf/packaging/releases:
| Sistema operativo | Arquitectura | Paquete |
|---|---|---|
| Ubuntu 22.04 (Jammy) | amd64 | wkhtmltox_0.12.6.1-3.jammy_amd64.deb |
| Ubuntu 22.04 (Jammy) | arm64 | wkhtmltox_0.12.6.1-3.jammy_arm64.deb |
| Ubuntu 20.04 (Focal) | amd64 | wkhtmltox_0.12.6-1.focal_amd64.deb |
| Debian 12 (Bookworm) | amd64 | wkhtmltox_0.12.6.1-3.bookworm_amd64.deb |
| Debian 12 (Bookworm) | arm64 | wkhtmltox_0.12.6.1-3.bookworm_arm64.deb |
| Debian 11 (Bullseye) | amd64 | wkhtmltox_0.12.6.1-3.bullseye_amd64.deb |
| Debian 11 (Bullseye) | arm64 | wkhtmltox_0.12.6.1-3.bullseye_arm64.deb |
| macOS | cocoa | wkhtmltox-0.12.6-2.macos-cocoa.pkg |
Ubuntu 24.04 (Noble): el proyecto no publica ningún paquete para Noble. Hay que instalarlo desde los repositorios de la distribución (
sudo apt install -y wkhtmltopdf, que trae la 0.12.6.1-2) o usar la build de Jammy, que funciona en Noble.
13. Problemas frecuentes
13.1 Error «psycopg2» al instalar las dependencias
# Instalar libpq-dev (las cabeceras de PostgreSQL)
sudo apt install -y libpq-dev
# Si falla, instalar desde un wheel
pip install psycopg2-binary
13.2 Error «wkhtmltopdf» no encontrado
# Instalar desde los repositorios oficiales
sudo apt install -y wkhtmltopdf
# Si la versión del repositorio es demasiado antigua, instalarlo manualmente.
# Todas las versiones disponibles están en:
# https://github.com/wkhtmltopdf/packaging/releases
13.3 Error de permisos en la base de datos
# Comprobar que el rol odoo existe en PostgreSQL
sudo -u postgres psql -c "\du odoo"
# Si no existe, crearlo:
sudo -u postgres createuser --createdb --no-superuser odoo
13.4 Error: «gevent» no compila
# Instalar las dependencias de compilación
sudo apt install -y python3-dev build-essential libffi-dev
# Para Odoo 16.0, fijar las versiones:
pip install gevent==22.10.2 greenlet==2.0.2
13.5 Odoo no arranca: «addons path not found»
# Comprobar que las rutas existen
ls -la /opt/odoo/odoo/addons
ls -la /opt/odoo/addons
# Ejecutar el lanzador directamente para ver la ruta que construye
/opt/odoo/scripts/odoo-launcher.sh --http-port=8069
13.6 WSL: «WSL2 no se puede iniciar porque la virtualización no está habilitada»
Este error aparece cuando la Plataforma de máquina virtual no está habilitada en Windows.
# Solución 1: habilitar la Plataforma de máquina virtual
# Abrir Panel de control > Activar o desactivar las características de Windows
# Marcar «Plataforma de máquina virtual»
# Reiniciar el equipo
# Solución 2: activar la virtualización en la BIOS/UEFI
# Reiniciar el equipo > entrar en la BIOS (F2/F10/Supr)
# Buscar la sección CPU > Advanced
# Activar Intel VT-x (Intel) o AMD-V (AMD)
# Guardar y reiniciar
# Solución 3: en máquinas virtuales (Proxmox, VMware, VirtualBox)
# Habilitar la virtualización anidada en la configuración de la VM
# Proxmox: VM > Options > Processor > vCPU type = host
# VMware: VM > Settings > Processor > Virtualize Intel VT-x/EPT
# VirtualBox: VM > Settings > System > Acceleration > Enable VT-x/AMD-V
13.7 WSL: la IP de WSL cambia después de un reinicio
# Obtener la nueva IP de WSL
wsl hostname -I
# Actualizar el reenvío de puertos
netsh interface portproxy delete v4tov4 listenport=2222 listenaddress=0.0.0.0
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=<NUEVA_IP>
13.8 WSL: el SSH no funciona desde el host
# Comprobar que el servicio SSH está corriendo dentro de WSL
wsl -d Ubuntu-24.04 -u root -- service ssh status
# Reiniciar el servicio SSH si hace falta
wsl -d Ubuntu-24.04 -u root -- service ssh restart
# Comprobar la regla de firewall
Get-NetFirewallRule -DisplayName "WSL SSH 2222"
# Si no existe, crearla de nuevo
New-NetFirewallRule -DisplayName "WSL SSH 2222" -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow
Referencias
- Documentación oficial de Odoo 18.0: www.odoo.com/documentation/18.0/administration/on_premise.html
- Instalación desde código fuente: www.odoo.com/documentation/18.0/administration/on_premise/source.html
- Paquetes instaladores: www.odoo.com/documentation/18.0/administration/on_premise/packages.html
- OCA (Odoo Community Association): github.com/OCA
- git-aggregator: pypi.org/project/git-aggregator/
- Versiones de wkhtmltopdf: github.com/wkhtmltopdf/packaging/releases
- Documentación de WSL: learn.microsoft.com/en-us/windows/wsl/install