Python Fire:Google 开源的命令行工具,任何 Python 对象都能变 CLI

CLI 工具有多常用,写过脚本的人都清楚。但每次都要自己写 argparse、处理参数解析,写多了确实烦。Google 开源的 Python Fire 就是来解决这个问题的,目前在 GitHub 拿下了 28,198 颗星。

这工具的思路很直接:把任何 Python 对象自动转成命令行接口。函数、类、模块、字典、列表,全都可以。不用写参数解析代码,不用管 help 信息,Fire 帮你搞定一切。

正文顶部截图

核心能力:一行代码生成 CLI

Python Fire 的使用方式极其简单。安装只需一行:

pip install fire

然后在你写好的 Python 代码里,加一行 fire.Fire(),CLI 就出来了。

举个例子,假设你有一个函数:

import fire

def hello(name="World"):
  return "Hello %s!" % name

if __name__ == '__main__':
  fire.Fire(hello)

命令行里直接跑:

python hello.py                # Hello World!
python hello.py --name=David   # Hello David!
python hello.py --help         # 自动生成帮助信息

参数名自动映射为命令行选项,默认值自动生效,help 信息自动生成。整个过程不需要写任何参数解析逻辑。

不只是函数。把 Fire 用在类上,每个公开方法都会变成子命令:

import fire

class Calculator(object):
  def double(self, number):
    return 2 * number

if __name__ == '__main__':
  fire.Fire(Calculator)

然后命令行里可以这样用:

python calculator.py double 10          # 20
python calculator.py double --number=15 # 30

类的方法自动变成子命令,方法参数自动变成命令选项。这部分对调试和探索代码特别有用。

README区域截图

不只是 CLI 生成器

Fire 的设计目标比"生成 CLI"更宽。它同时解决了好几个场景的需求。

调试代码。给一个模块或者类加上 Fire,就能在命令行里交互式地调用里面的方法、查看属性值。比起反复改代码加 print,直接在命令行里调方法快得多。

探索未知代码。接手一个不熟悉的 Python 库或模块时,用 Fire 把它变成 CLI,能直观地看到有哪些可调用的方法和参数。这比翻文档或读源码来得直接。

Python 和 Bash 的桥梁。写 Shell 脚本时,如果需要调用 Python 函数,通常要单独写个脚本封装。Fire 让这个过程变得简单,Python 代码可以直接当命令行工具用。

交互式 REPL。Fire 内置了交互模式,启动一个预加载好你的模块和变量的 Python REPL,方便手动探索和调试。

为什么值得关注

Python 标准库的 argparse 功能不差,但写起来确实啰嗦。click 和 typer 这类第三方库已经比 argparse 简洁很多,但它们仍然需要你显式地定义参数、写装饰器。Fire 的思路不同:它不要求你写任何额外的声明代码,直接基于你已有的 Python 对象来生成 CLI。

这种方式牺牲了一些灵活性,换来了极大的便捷。对于快速原型、内部工具、调试脚本这些场景,Fire 的零配置方式明显更快。

Google 的背书也是一个加分项。虽然项目注释里说明了这不是 Google 官方产品,但代码质量和维护性有基本保障。Apache 2.0 协议,用起来没有合规负担。

适合谁用

如果你经常需要写命令行工具,尤其是内部用的运维脚本、数据管道、批量处理工具,Fire 能省不少事。把精力放在业务逻辑上,CLI 的搭建部分交给 Fire。

如果你在做代码调试或逆向工程,需要快速探索一个模块或类的接口,Fire 也是趁手的小工具。

如果命令行工具的交互体验需要高度定制,比如复杂的参数校验、子命令嵌套、自定义输出格式,click 或 typer 可能更合适。Fire 更适合"快速出活"的场景,不是大而全的 CLI 框架。

总的来说,Python Fire 是个把简单做到极致的小工具。它的价值不在于功能多丰富,而在于它让"写 CLI"这件事几乎消失了。一行 import,一行 Fire,你的 Python 代码就能从命令行跑起来。

Fire 是个把简单做到极致的小工具。它的价值不在于功能多丰富,而在于它让"写 CLI"这件事几乎消失了。一行 import,一行 Fire,你的 Python 代码就能从命令行跑起来。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐