Odoo's power comes from its modular architecture. Beyond the official App Store, you can install community modules, third-party packages, or your own custom code. This guide walks through every method: configuring addons_path, using the Apps menu, deploying via Git, and managing Python dependencies.
What Is an Odoo Custom Module?
A custom module is any Python package that follows Odoo's module structure — a directory containing __manifest__.py and __init__.py. Odoo discovers modules by scanning one or more directories listed in addons_path inside odoo.conf. When Odoo starts, it builds an in-memory registry of every module it finds.
Step 1 — Configure addons_path
Open your Odoo configuration file (commonly /etc/odoo/odoo.conf or ~/.odoorc) and locate the addons_path line. Add the path to your custom modules directory:
[options]
addons_path = /opt/odoo/odoo/addons,/opt/odoo/enterprise,/opt/odoo/custom
Paths are comma-separated. Odoo scans them left to right, and the last match wins if two modules share the same technical name. Create your custom directory and make sure the Odoo system user has read access:
sudo mkdir -p /opt/odoo/custom
sudo chown odoo:odoo /opt/odoo/custom
Restart Odoo after any change to odoo.conf for the new path to take effect.
Step 2 — Update the Apps List
Odoo caches the module list in the database. After placing a new module on disk, you must tell Odoo to rescan:
- Activate developer mode: go to Settings → General Settings, scroll to the bottom, and click Activate the developer mode.
- Navigate to Apps → Update Apps List.
- Click Update in the dialog that appears.
Odoo will scan every directory in addons_path and register newly discovered modules.
Step 3 — Install from the Apps Menu
Once the list is updated, search for your module by its technical name or display name in the Apps menu. Remove the Apps filter if you want to see all module categories, then click Install. Odoo will resolve dependencies and install them in the correct order.
To install from the command line (useful in CI pipelines or during initial setup):
odoo -d mydb -i my_custom_module --stop-after-init
To upgrade an already-installed module:
odoo -d mydb -u my_custom_module --stop-after-init
Step 4 — Git Clone Method
For team environments and repeatable deployments, store your modules in Git and clone them into the addons_path directory:
# Clone a community module from OCA
cd /opt/odoo/custom
git clone https://github.com/OCA/server-tools.git oca_server_tools
# Or clone your private repo using an SSH deploy key
git clone [email protected]:yourorg/your-odoo-modules.git private_modules
After cloning, update the Apps list and install as described above. For automated deployments, see our guide on Odoo Git deployment workflows.
Step 5 — Handling pip Dependencies
Some modules declare Python package requirements in their __manifest__.py under the external_dependencies key:
'external_dependencies': {
'python': ['boto3', 'requests-oauthlib'],
},
Install these packages into the same Python environment that runs Odoo:
# If using a virtualenv
source /opt/odoo/venv/bin/activate
pip install boto3 requests-oauthlib
# If running in Docker
docker exec -u root odoo_container pip install boto3 requests-oauthlib
For Docker-based deployments, the cleanest approach is to extend the official Odoo image with a custom Dockerfile that pre-installs your dependencies, so they survive container restarts and image updates.
Troubleshooting Common Issues
- Module not visible after Update Apps List: Check that the directory contains both
__manifest__.pyand__init__.py. A missing__init__.pycauses silent failure. - ImportError on startup: A required pip package is missing. Check Odoo logs at
/var/log/odoo/odoo.log. - Version mismatch: Ensure the module's
versionfield in__manifest__.pystarts with your Odoo major version (e.g.,17.0.1.0.0). - Conflicting module names: Two modules with the same technical name in different
addons_pathentries. The last path wins; rename one module to resolve.
Installing Custom Modules on DeployMonkey
DeployMonkey makes custom module installation straightforward on managed Odoo hosting:
- Git integration: Connect your module repository directly from the Instance Settings panel. DeployMonkey pulls your repo and mounts it automatically into the container's addons path.
- No SSH required: Deploy key management is handled by the platform — no manual key exchange needed. pip dependencies: List your Python requirements in a
- One-click upgrade: After pushing a new commit, trigger a module upgrade from the dashboard without restarting the entire instance.
- All Odoo versions supported: Modules for Odoo 14 through 19 are supported on all plans, including the free tier.
requirements.txt at the root of your repo. DeployMonkey installs them during every deployment.
Learn more about Git-based module deployment in our Odoo Git deployment guide.
FAQ
Can I install OCA modules on Odoo.com SaaS?
No. Odoo.com SaaS does not allow custom or community modules. You need a self-hosted or managed Odoo instance (like DeployMonkey) to install third-party modules.
Do I need to restart Odoo after installing a module?
Not always. Installing through the Apps menu installs at runtime without a restart. However, if your module adds new Python files or changes server-side code that is cached, a restart ensures all workers pick up the changes.
What is the difference between -i and -u flags?
-i installs a module for the first time. -u upgrades an already-installed module, re-running data files and updating database schema. Use -u after modifying an existing module.
How do I install a module from a private GitHub repository?
Generate an SSH deploy key (ssh-keygen -t ed25519), add the public key to the repository's deploy keys in GitHub, and clone using the SSH URL. On DeployMonkey, the platform manages deploy keys for you automatically.
Can I install multiple modules at once?
Yes. Pass a comma-separated list to -i or -u: odoo -d mydb -i module_a,module_b --stop-after-init. Odoo resolves dependencies automatically.
Ready to Deploy Custom Modules Without the Headache?
DeployMonkey handles the infrastructure so you can focus on building. Git-connected deployments, automatic pip dependency installation, and one-click module upgrades are included on every plan — starting free. See plans and pricing or start your free instance today.