By: Aswani

External Dependencies ,Pre Init Hook & Post Init Hook In Odoo

When we creating a module in odoo important thing is for odoo 10.0 and later versions) or odoo 9.0 and earlier versions).

In manifest file, we can define

  1. name (str, required):- Human readable name of the module(other than technical name)

  2. version(str) :- Module version(should follow version rules).

  3. summary(str):- Short description of the module.

  4. description (str):-Extended description for the module.

  5. author (str):- Module author’s name.

  6. website (str):- Module author’s website URL.

  7. license (str, defaults: AGPL-3):- Distribution license for the module.

  8. category (str, default: Uncategorized) :- Classification category within Odoo.

  9. depends (list(str)):- Depended on odoo modules which must be loaded before the module.

  10. data (list(str)):- Path of all data files from the root directory which must always be installed or updated with the module.

  11. demo (list(str)):- Path of all demo data files which are only installed or updated in demonstration mode.

  12. auto_install (bool, default: False):- If True, the module will automatically be installed if all dependent modules are installed.

Except for those keys in odoo we have some special keys for module compatibility check, adding required dependencies and for running scripts during module installation.Those keys are



-post _init_hook

External dependency

In file extenal_dependency key is used for declaring all external libraries (python packages or any binaries) that have to be installed to make the module work. External dependencies are defined in file under external dependency key like below

"external_dependencies": {"python": [], "bin": []},

Check if some Python library exists:

"external_dependencies": {"python" : ["openid"]}

Check if some system application exists:

"external_dependencies": {"bin" : ["libreoffice"]}

If someone created a module in odoo, which uses Python modules for its working. So at the time of module installation if the system does not find Python packages or any binaries defined in installed in the system, it will raise an error and not allow to install the module.

For example:

In Odoo's  ‘Weighing Scale Hardware Driver’ module’s file there is a line

‘external_dependencies’: {‘python’:[‘serial’]}

For defining python dependency file ‘scale’ for the module ‘Weighing Scale Hardware Driver’, and this module allows the point of sale to connect to a scale using a USB HSM serial scale interface such as Mettler Toledo Ariva. The module requires Python dependency of ‘scale’ library, so in the module they use external_dependencies’.So at the time of module installation, if the system does not find ‘scale’ library installed, it will raise an error and not allow to install the module.

Pre Init Hook:

The ‘pre_init_hook‘ is also a special key available in During installation, when the user clicks to install the custom module, it will call a Pre-installation hook and do some initialization, copying of files or other and then after that once it finished, we can capture the return installation process of Odoo and run a Post-installation hook.

The pre init hook is called with a database cursor and may perform modifications in the database to prepare for the module installation.

You can use pre_init_hook’ before registering the module's logic in the ir.module.module. It is commonly used for modules compatibility check.

For using the pre_init_hook define this key in your and assigning it’s a method created in your of the module(Value of the key is the name of a Python function which must be defined in


For Example :

As many times we also have validated that the module build for Odoo 8 should not be installed in Odoo 9 in that case we use pre_init_hook .

def version_check(cr):
   # version check
    return True

Post Init Hook:

The post init hook is called with a database cursor and registry object and may perform modifications in the database to finalize the module installation. We can define the ‘post_init_hook‘ in the same ways as pre init hook.

For Example :

In odoo Invoicing module they using post init hook

For auto installing l10n module


def _auto_install_l10n(cr, registry):
   #check the country of the main company (only) and eventually load some module needed in   that country
   #auto install localization module(s) if available



Leave a comment