It can get tedious to type all those command line arguments every time. Fix it by creating a configuration file:
db: driver: mysql user: omry pass: secret
Specify the config file by passing a
config_path parameter to the
The location of the
config_path is relative to your Python file.
@hydra.main(config_path='config.yaml')def my_app(cfg): print(OmegaConf.to_yaml(cfg))
config.yaml is loaded automatically when you run your application
$ python my_app.pydb: driver: mysql pass: secret user: omry
You can override values in the loaded config from the command line:
$ python my_app.py db.user=root db.pass=1234db: driver: mysql user: root pass: 1234
Strict mode is useful for catching mistakes in both the command line overrides and in the code early.
Strict mode is on by default when you specify a configuration file for the
config_path argument in
It can be turned on or off via the
strict argument in your
@hydra.main(config_path='config.yaml')def my_app(cfg): driver = cfg.db.driver # Okay user = cfg.db.user # Okay password = cfg.db.password # Not okay, there is no password field in db! # This will result in a KeyError
Strict mode will also catch command line override mistakes:
$ python my_app.py db.port=3306Traceback (most recent call last):...KeyError: 'Accessing unknown key in a struct : db.port
With strict mode off, accessing unknown keys in the config is permitted and both the above override and the example below would run.
@hydra.main(config_path='config.yaml', strict=False)def my_app(cfg): cfg.db.port = 3306 # Okay