Typer, 훌륭한 CLI를 구축하세요. 코딩하기 쉽습니다. Python 유형 힌트를 기반으로 합니다.
문서 : https://typer.tiangolo.com
소스코드 : https://github.com/fastapi/typer
Typer는 사용자가 사용하기 좋아 하고 개발자가 만들기를 좋아할 CLI 애플리케이션을 구축하기 위한 라이브러리입니다. Python 유형 힌트를 기반으로 합니다.
또한 스크립트를 실행하여 자동으로 CLI 애플리케이션으로 변환하는 명령줄 도구이기도 합니다.
주요 기능은 다음과 같습니다.
typer
명령/프로그램이 포함되어 있으며, 내부적으로 Typer를 사용하지 않는 경우에도 스크립트를 자동으로 CLI로 변환합니다. Typer는 FastAPI의 동생이자 CLI의 FastAPI입니다.
가상 환경을 생성 및 활성화한 후 Typer를 설치합니다.
$ pip install typer
---> 100%
Successfully installed typer rich shellingham
main.py
파일을 만듭니다. def main ( name : str ):
print ( f"Hello { name } " )
이 스크립트는 내부적으로 Typer를 사용하지도 않습니다. 그러나 typer
명령을 사용하여 CLI 애플리케이션으로 실행할 수 있습니다.
typer
명령을 사용하여 애플리케이션을 실행합니다.
// Run your application
$ typer main.py run
// You get a nice error, you are missing NAME
Usage: typer [PATH_OR_MODULE] run [OPTIONS] NAME
Try 'typer [PATH_OR_MODULE] run --help' for help.
╭─ Error ───────────────────────────────────────────╮
│ Missing argument 'NAME'. │
╰───────────────────────────────────────────────────╯
// You get a --help for free
$ typer main.py run --help
Usage: typer [PATH_OR_MODULE] run [OPTIONS] NAME
Run the provided Typer app.
╭─ Arguments ───────────────────────────────────────╮
│ * name TEXT [default: None] [required] |
╰───────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────╮
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────╯
// Now pass the NAME argument
$ typer main.py run Camila
Hello Camila
// It works! ?
이것은 Typer를 내부적으로 사용하지 않는 가장 간단한 사용 사례이지만 이미 간단한 스크립트에 매우 유용할 수 있습니다.
참고 : 자동 완성은 Python 패키지를 생성하고 --install-completion
으로 실행하거나 typer
명령을 사용할 때 작동합니다.
이제 자신의 코드에서 Typer를 사용하기 시작하고 다음을 사용하여 main.py
업데이트해 보겠습니다.
import typer
def main ( name : str ):
print ( f"Hello { name } " )
if __name__ == "__main__" :
typer . run ( main )
이제 Python으로 직접 실행할 수 있습니다.
// Run your application
$ python main.py
// You get a nice error, you are missing NAME
Usage: main.py [OPTIONS] NAME
Try 'main.py --help' for help.
╭─ Error ───────────────────────────────────────────╮
│ Missing argument 'NAME'. │
╰───────────────────────────────────────────────────╯
// You get a --help for free
$ python main.py --help
Usage: main.py [OPTIONS] NAME
╭─ Arguments ───────────────────────────────────────╮
│ * name TEXT [default: None] [required] |
╰───────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────╮
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────╯
// Now pass the NAME argument
$ python main.py Camila
Hello Camila
// It works! ?
참고 : typer
명령을 사용하여 이 동일한 스크립트를 호출할 수도 있지만 반드시 그럴 필요는 없습니다.
이것은 가능한 가장 간단한 예였습니다.
이제 좀 더 복잡한 것을 살펴보겠습니다.
main.py
파일을 수정합니다.
typer.Typer()
앱을 만들고 해당 매개변수를 사용하여 두 개의 하위 명령을 만듭니다.
import typer
app = typer . Typer ()
@ app . command ()
def hello ( name : str ):
print ( f"Hello { name } " )
@ app . command ()
def goodbye ( name : str , formal : bool = False ):
if formal :
print ( f"Goodbye Ms. { name } . Have a good day." )
else :
print ( f"Bye { name } !" )
if __name__ == "__main__" :
app ()
그러면 다음이 수행됩니다.
typer.Typer
앱을 명시적으로 만듭니다.typer.run
실제로 암시적으로 하나를 생성합니다.@app.command()
사용하여 두 개의 하위 명령을 추가합니다.typer.run
대신) app()
자체를 실행합니다.새로운 도움말을 확인하세요:
$ python main.py --help
Usage: main.py [OPTIONS] COMMAND [ARGS]...
╭─ Options ─────────────────────────────────────────╮
│ --install-completion Install completion │
│ for the current │
│ shell. │
│ --show-completion Show completion for │
│ the current shell, │
│ to copy it or │
│ customize the │
│ installation. │
│ --help Show this message │
│ and exit. │
╰───────────────────────────────────────────────────╯
╭─ Commands ────────────────────────────────────────╮
│ goodbye │
│ hello │
╰───────────────────────────────────────────────────╯
// When you create a package you get auto-completion for free, installed with --install-completion
// You have 2 subcommands (the 2 functions): goodbye and hello
이제 hello
명령에 대한 도움말을 확인하세요.
$ python main.py hello --help
Usage: main.py hello [OPTIONS] NAME
╭─ Arguments ───────────────────────────────────────╮
│ * name TEXT [default: None] [required] │
╰───────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────╮
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────╯
이제 goodbye
명령에 대한 도움말을 확인하세요.
$ python main.py goodbye --help
Usage: main.py goodbye [OPTIONS] NAME
╭─ Arguments ───────────────────────────────────────╮
│ * name TEXT [default: None] [required] │
╰───────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────╮
│ --formal --no-formal [default: no-formal] │
│ --help Show this message │
│ and exit. │
╰───────────────────────────────────────────────────╯
// Automatic --formal and --no-formal for the bool option ?
이제 새로운 명령줄 애플리케이션을 시험해 볼 수 있습니다.
// Use it with the hello command
$ python main.py hello Camila
Hello Camila
// And with the goodbye command
$ python main.py goodbye Camila
Bye Camila!
// And with --formal
$ python main.py goodbye --formal Camila
Goodbye Ms. Camila. Have a good day.
요약하자면, 매개변수 유형( CLI 인수 및 CLI 옵션 )을 함수 매개변수로 선언하면 됩니다 .
표준 최신 Python 유형을 사용하면 됩니다.
새로운 구문, 특정 라이브러리의 메서드나 클래스 등을 배울 필요가 없습니다.
그냥 표준 Python 입니다.
예를 들어 int
의 경우:
total : int
또는 bool
플래그의 경우:
force : bool
파일 , 경로 , 열거형 (선택 사항) 등에 대해서도 마찬가지입니다. 하위 명령 그룹을 만들고, 메타데이터를 추가하고, 추가 유효성 검사 등을 수행하는 도구도 있습니다.
모든 곳에서 완성 및 유형 확인을 포함하여 뛰어난 편집기 지원을 받을 수 있습니다 .
사용자는 패키지를 설치하거나 typer
명령을 사용할 때 터미널(Bash, Zsh, Fish, PowerShell)에서 자동 --help
, 자동 완성 기능을 얻을 수 있습니다.
더 많은 기능을 포함하는 더 완전한 예를 보려면 튜토리얼 - 사용자 가이드를 참조하세요.
타이퍼는 거인의 어깨 위에 서 있다. 유일한 내부 필수 종속성은 Click입니다.
기본적으로 추가 표준 종속성도 함께 제공됩니다.
rich
: 자동으로 보기 좋은 형식의 오류를 표시합니다.shellingham
: 설치 완료 시 현재 쉘을 자동으로 감지합니다.shellingham
에서는 --install-completion
사용할 수 있습니다.shellingham
없으면 설치 완료를 위해 쉘 이름을 전달해야 합니다(예: --install-completion bash
.typer-slim
추가 표준 선택적 종속성을 원하지 않으면 대신 typer-slim
설치하십시오.
다음을 사용하여 설치하는 경우:
pip install typer
...다음과 동일한 코드와 종속성이 포함되어 있습니다.
pip install " typer-slim[standard] "
standard
추가 종속성은 rich
및 shellingham
입니다.
참고 : typer
명령은 typer
패키지에만 포함되어 있습니다.
이 프로젝트는 MIT 라이선스 조건에 따라 라이선스가 부여됩니다.