Python Fire

Python function, class, object, module을 reflection으로 탐색해 CLI를 자동 생성하는 library다.

  • fire.Fire(component) 한 번으로 Python component를 command tree로 노출한다.
  • 함수 parameter는 positional argument 또는 named flag로 전달할 수 있다.
  • 빠른 내부 도구와 탐색용 CLI에 편리하지만 공개 API 범위를 의도적으로 제한해야 한다.

공식 설치 문서는 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 –force

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로 명시해 노출 범위를 제한한다.
  • 함수 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 표시
  • 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가 더 적합할 수 있다.
  • 이 환경에는 Python Fire가 설치되어 있지 않아 live output을 검증하지 않았다.
  • 자동 type 변환과 노출되는 member는 Python object 구조에 영향을 받으므로 dependency와 Fire version을 고정하고 integration test로 command contract를 확인한다.

설치된 environment에서 application별 help와 Fire 자체 flag를 확인한다.

python3 app.py --help
python3 app.py command -- --help
python3 -m fire --help
  • codex:: 2026-08-03 Python Fire 설치, component 노출, module 실행, argument와 Fire flag 사용법을 정리.
  • /home/u613600155/domains/cli.zerotymer.net/public_html/data/pages/python/fire/ko.txt
  • 마지막으로 수정됨: 2026/08/03 03:43
  • (바깥 편집)