Problem
Installing Odoo 19.0 in editable mode takes ~21s, compared to ~0.6s for 18.0 — a 36x regression.
Root Cause
Odoo 19.0 removed __init__.py from core directories (odoo/, odoo/addons/) and switched setup.py from find_packages() to find_namespace_packages() to compensate. Because find_namespace_packages() has no exclusions, it treats every subdirectory as a Python namespace package — including static assets, i18n files, XML data, views, security configs, etc.
Root cause chain:
- Odoo 19.0 removes
__init__.py from odoo/ root → find_packages() returns 0 packages
- Odoo switches to
find_namespace_packages() to compensate
find_namespace_packages() has no exclusions → picks up all subdirs (static, i18n, data, views, security, tests…)
- setuptools
build_editable processes all 7,791 "packages" → generates a 680KB finder file with all namespace paths → 36x slowdown
Measurements
|
Odoo 18.0 |
Odoo 19.0 |
setup.py method |
find_packages() |
find_namespace_packages() |
| Packages found |
79 |
7,791 |
Packages with __init__.py |
~79 |
1,974 |
Namespace-only dirs (no __init__.py) |
0 |
5,817 |
| Editable install time |
~0.6s |
~21.6s |
SOURCES.txt lines |
1,139 |
8,733 |
Generated __editable__ finder size |
small |
680KB |
The 5,817 namespace-only directories are non-Python assets: addons/*/static/, addons/*/i18n/, addons/*/data/, addons/*/views/, addons/*/security/, etc.
Reproduction
uv run --with setuptools python3 -c "
from setuptools import find_namespace_packages
pkgs = find_namespace_packages(where='/path/to/odoo/19.0')
print(f'Odoo 19.0: Found {len(pkgs)} packages')
"
# Output: Odoo 19.0: Found 7791 packages
time uv pip install -e 'file:///path/to/odoo/19.0#egg=odoo' --no-deps
# real 0m21.6s
Impact
Any user creating an Odoo 19.0 venv with odoo-venv experiences a ~21s freeze at the "Installing Odoo in editable mode" step.
Problem
Installing Odoo 19.0 in editable mode takes ~21s, compared to ~0.6s for 18.0 — a 36x regression.
Root Cause
Odoo 19.0 removed
__init__.pyfrom core directories (odoo/,odoo/addons/) and switchedsetup.pyfromfind_packages()tofind_namespace_packages()to compensate. Becausefind_namespace_packages()has no exclusions, it treats every subdirectory as a Python namespace package — including static assets, i18n files, XML data, views, security configs, etc.Root cause chain:
__init__.pyfromodoo/root →find_packages()returns 0 packagesfind_namespace_packages()to compensatefind_namespace_packages()has no exclusions → picks up all subdirs (static, i18n, data, views, security, tests…)build_editableprocesses all 7,791 "packages" → generates a 680KB finder file with all namespace paths → 36x slowdownMeasurements
setup.pymethodfind_packages()find_namespace_packages()__init__.py__init__.py)SOURCES.txtlines__editable__finder sizeThe 5,817 namespace-only directories are non-Python assets:
addons/*/static/,addons/*/i18n/,addons/*/data/,addons/*/views/,addons/*/security/, etc.Reproduction
Impact
Any user creating an Odoo 19.0 venv with
odoo-venvexperiences a ~21s freeze at the "Installing Odoo in editable mode" step.