Python Fire
Python function, class, object, module을 reflection으로 탐색해 CLI를 자동 생성하는 library다.
Summary
fire.Fire(component)한 번으로 Python component를 command tree로 노출한다.- 함수 parameter는 positional argument 또는 named flag로 전달할 수 있다.
- 빠른 내부 도구와 탐색용 CLI에 편리하지만 공개 API 범위를 의도적으로 제한해야 한다.
Installation
공식 설치 문서는 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에 설치한다.
Usage
함수 하나 노출
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]
여러 command를 명시적으로 노출
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 –force
Module Execution
source를 수정하지 않고 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…]
module 전체나 신뢰 경계 밖의 object를 무심코 노출하면 의도하지 않은 public member와 동작까지 CLI에서 접근할 수 있다. production CLI에는 허용할 command를 dict, 함수 또는 전용 class로 명시해 노출 범위를 제한한다.
Arguments and Fire Flags
- 함수 argument는 위치 또는
–name=value/–name value형태로 전달할 수 있다. - Fire는 입력 문자열을 Python literal 형태로 변환할 수 있다. 문자열
"10"과 숫자10을 구분하려면 shell quote 단계까지 고려해야 한다. - component 실행 뒤 반환된 object의 member나 method를 계속 이어서 탐색할 수 있다.
- Fire 자체 flag는 command argument와 구분하기 위해 isolated
–뒤에 둔다.
# 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 표시
Troubleshooting
- shell이 quote를 먼저 제거한다. 문자열 literal을 강제로 전달하려면 shell에 quote 문자 자체가 남도록 escape해야 할 수 있다.
–help가 함수 argument인지 Fire flag인지 모호하면 command 뒤 isolated–를 사용한다.- local file 이름을
sys.py,cmd.py,os.py처럼 표준 모듈과 같게 만들면 import shadowing으로 오류가 날 수 있다. - stable public CLI contract와 엄격한 validation이 중요하면
argparse, Click 또는 Typer처럼 schema를 명시하는 framework가 더 적합할 수 있다.
Compatibility
- 이 환경에는 Python Fire가 설치되어 있지 않아 live output을 검증하지 않았다.
- 자동 type 변환과 노출되는 member는 Python object 구조에 영향을 받으므로 dependency와 Fire version을 고정하고 integration test로 command contract를 확인한다.
Help
설치된 environment에서 application별 help와 Fire 자체 flag를 확인한다.
python3 app.py --help python3 app.py command -- --help python3 -m fire --help
See Also
History
- codex:: 2026-08-03 Python Fire 설치, component 노출, module 실행, argument와 Fire flag 사용법을 정리.