설정파일

매번 커맨드 라인에서 명령어로 임의의 객체를 만드는 행위는 굉장히 귀찮습니다. 이것은 설정파일에서 생성할 수 있습니다.

설정파일: config.yaml

db:
  driver: mysql
  user: omry
  pass: secret

데코레이터 @hydra.main()config_path에 설정파일을 지정하여 전달할 수 있습니다. config_path는 파이썬 파일의 상대경로 입니다.

파이썬 파일: my_app.py

@hydra.main(config_path='config.yaml')
def my_app(cfg):
    print(cfg.pretty())

config.yaml은 너의 프로그램을 실행할 때 자동으로 읽습니다.

$ python my_app.py
db:
  driver: mysql
  pass: secret
  user: omry

당신은 커맨드라인에서 설정을 읽어올 때 값을 재정의 할 수 있습니다.

$ python my_app.py db.user=root db.pass=1234
db:
  driver: mysql
  user: root
  pass: 1234

엄격모드(Strict mode)

엄격모드는 설정을 재정의 하거나 코드안에서 실수를 줄이기 위해 사용합니다. 엄격모드는 데코레이터 @hydra.main에서 config_path 인자를 위해 특정 파일경로를 전달할 때 기본적으로 활성화가 됩니다.

@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

또한 엄격모드는 커맨드라인에서 재정의할 때 실수를 잡아줍니다.

$ python my_app.py db.port=3306
Traceback (most recent call last):
...
KeyError: 'Accessing unknown key in a struct : db.port

엄격모드를 끄면 알 수 없는 키를 접근할 수 있으며 위의 재정의 예시와 아래의 코드 모두 실행합니다.