Python function, class, object, module을 reflection으로 탐색해 CLI를 자동 생성하는 library다.
fire.Fire(component) 한 번으로 Python component를 command tree로 노출한다.공식 설치 문서는 PyPI와 conda-forge 방법을 제공한다. project virtual environment 사용을 권장한다.
# Linux / macOS python3 -m venv .venv source .venv/bin/activate python3 -m pip install fire python3 -c "import fire; print(fire.__version__)" # conda conda install fire -c conda-forge
# Windows PowerShell py -m venv .venv .venv\Scripts\Activate.ps1 py -m pip install fire py -c "import fire; print(fire.__version__)"
Python Fire가 공식적으로 별도 안내하는 APT, DNF/YUM, Homebrew, winget package는 없다. Python environment에 설치한다.
import fire def hello(name: str, count: int = 1): """이름을 받아 인사합니다.""" return "\n".join([f"Hello, {name}!"] * count) if __name__ == "__main__": fire.Fire(hello)
python3 hello.py World python3 hello.py --name World --count 2 python3 hello.py --help
python3 HELLO.py [NAME] [–name NAME] [–count COUNT]import fire def create(name, admin=False): return {"name": name, "admin": admin} def remove(name, force=False): if not force: raise ValueError("--force is required") return f"removed {name}" if __name__ == "__main__": fire.Fire({"create": create, "remove": remove})
python3 USERS.py create NAME [–admin]python3 USERS.py remove NAME –forcesource를 수정하지 않고 module 또는 file을 Fire로 탐색할 수 있다.
python3 -m fire example hello --name=World python3 -m fire example.py hello --name=World
python3 -m fire MODULE_OR_FILE [MEMBER…] [ARGS…]–name=value / –name value 형태로 전달할 수 있다."10"과 숫자 10을 구분하려면 shell quote 단계까지 고려해야 한다.– 뒤에 둔다.# interactive mode python3 app.py command -- --interactive # separator를 X로 변경 python3 app.py item1 item2 X upper -- --separator=X # trace 표시 python3 app.py command -- --trace
–interactive, -i : 실행 context로 interactive mode 진입–separator VALUE : component chaining 구분자 변경–trace, -t : Fire command 해석 trace 표시–verbose, -v : private member 등을 포함한 상세 표시–help, -h : 현재 component와 이어서 사용할 수 있는 command 표시–help가 함수 argument인지 Fire flag인지 모호하면 command 뒤 isolated –를 사용한다.sys.py, cmd.py, os.py처럼 표준 모듈과 같게 만들면 import shadowing으로 오류가 날 수 있다.argparse, Click 또는 Typer처럼 schema를 명시하는 framework가 더 적합할 수 있다.설치된 environment에서 application별 help와 Fire 자체 flag를 확인한다.
python3 app.py --help python3 app.py command -- --help python3 -m fire --help