Python CLI Library (fire vs click vs Typer)

홍성환·2021년 12월 21일
5

python

목록 보기
1/3
post-thumbnail

1. Intro

  • python 프로그램에 인자를 전달하고 싶을 때 보통 argparser를 쓰게 된다.
  • argparse는 인자가 하나 추가될 때 마다 코드를 한줄 한줄 추가해줘야 한다.
  • argparse는 또한 비슷한 라인이 중복되며 덕지 덕지 달라 붙게 되어, 읽기도 불편하다.
  • python에서는 argparse의 도움없이 최소한의 작업으로 python 함수를 CLI화 해주는 라이브러리들이있다.
  • 이러한 라이브러리에 대해 알아보자.
  • 난 그저 함수의 인자를 CLI에서 받을 수 있게 하고 싶은건데... 이렇게 많은 반복작업이 필요한걸까..? argparse가 싫어요..

2. fire (feat google..)

2-1 fire.Fire(func)

  • 위와 같이 함수를 만들고 그 함수를 fire.Fire(func) 로 실행해주면 된다.
  • 그러면 이제 argparse의 도움없이 함수가 받는 인자를 CLI 인자로 넘겨줄 수 있게 된다.
  • 함수의 default 파라메터터를 지정하면, cli에서도 deafault 값이 동작하게 된다.

2-1 fire.Fire(class)

  • fire.Fire(class)
  • fire는 class도 CLI로 만들어 주는데 각 method를 호출할 수 있게 된다.
  • fire는 python 함수를 쉽고 빠르게 CLI 프로그램으로 바꿔줄 수 있다.

3. click

  • https://click.palletsprojects.com/en/8.0.x/

  • click 또한 fire 처럼 함수를 쉽게 CLI 프로그램으로 바꿔준다.

  • click은 decorator를 활용해 함수를 cli화 해준다.

  • 위 코드는 예시 코드인데 hello라는 코드에 click의 데코레이터를 입혀서 CLI 함수로 만들어 준다.

  • fire의 경우에는 fire.Fire()를 통해 CLI 프로그램으로 만들었다면, click의 경우에는 데코레이터로 함수를 CLI로 바꾸어 실행하게된다.

  • fire보다 click.option으로 인해 복잡하지만, help 문구 option 이름 등 좀더 구체적인 기능을 직관적으로 원할때 좋은 것 같다.(fire도 어느정도 가능하긴 함)

4. Typer

  • https://typer.tiangolo.com/
  • typer는 fastAPI에서 딸려나온 작은 프로젝트인 것 같다.
  • typer는 fire나 click에 비해서 최근에 나온 라이브러리이다.
  • fire에 비해서 역사가 짧아서 그런지 국내에서 인지도는 낮은 편이다.
  • 아래 처럼 fire와 매우 비슷한 형식으로 쓸 수 있다.
  • 실행은 아래처럼 함수의 인자를 넘기면 된다.
  • func(**kwargs) 같은 경우에도 잘 되는지 확인해봤는데, 문서에는 없지만 https://github.com/tiangolo/typer/issues/163 이미 구현이 되어 있다. 해당 pr을 보면 사용예시를 볼 수 있다.
  • fire는 type hint를 주어도 type check를 하지 않고 의미가 없다.
  • 반면 typer는 이름에서도 알 수 있듯이 type check가 된다는 점에서 상황에 따라 fire보다 좋을 수 있을 것 같다.

5. Conclusion

  • python CLI 라이브러리 들을 알아봄
  • click = help 메시지, 인자 이름 변형, default값, 타입 등등 복잡한 기능 원함
  • fire = 원하는거 별로 없고 간단한게 좋아
  • typer = type check + fire
profile
Machine Learning Engineer: recsys, mlops

0개의 댓글