Command Line Interface: fire
Python Fire is a library for automatically generating command-line interfaces (CLIs) from absolutely any Python object.
Python Fire is a simple way to create a CLI in Python.
Python Fire is a helpful tool for developing and debugging Python code.
Python Fire helps with exploring existing code or turning other people’s code into a CLI.
Python Fire makes transitioning between Bash and Python easier.
Python Fire makes using a Python REPL easier by setting up the REPL with the modules and variables you’ll need already imported and created.
For more information visit https://google.github.io/python-fire/
Installation
$ poetry add fire
Basic Usage
You can call Fire
on any Python object:
functions, classes, modules, objects, dictionaries, lists, tuples, etc. They all work!
Here’s an example of calling Fire on a function.
from numbers import Real
import fire
def add(a: Real, b: Real) -> Real:
return a + b
if __name__ == '__main__':
fire.Fire(add)
Then, from the command line, you can run:
$ python -m python_lifecycle_training.calculator.simple 2 2
4
Now, let us try calling Fire on a class by creating a complex calculator.
# python_lifecycle_training/calculator/complex.py
import fire
class Calculator:
@staticmethod
def add(a, b):
return a + b
@staticmethod
def sub(a, b):
return a - b
@staticmethod
def mul(a, b):
return a * b
@staticmethod
def div(a, b):
return a / b
if __name__ == "__main__":
fire.Fire(Calculator)
Then, from the command line, you can run:
$ python -m python_lifecycle_training.calculator.complex add 2 2
4
$ python -m python_lifecycle_training.calculator.complex sub 2 2
0
$ python -m python_lifecycle_training.calculator.complex mul 2 2
4
$ python -m python_lifecycle_training.calculator.complex div 2 2
1.0
Self-defined Commands
It is pretty tedious to run our commands like this so let us create some entry points.
First replace the file executable if __name__ == "__main__":
with a main method that
calls your fire command.
Before
if __name__ == "__main__":
fire.Fire(Calculator)
After
def main():
fire.Fire(Calculator)
Now create entry points in pyproject.toml
below dev-dependencies.
[tool.poetry.scripts]
calc-simp = "python_lifecycle_training.calculator.simple:main"
calc-complex = "python_lifecycle_training.calculator.complex:main"
Install your package via poetry
$ poetry install
Now you can run:
$ calc-simp 2 2
4
$ calc-complex add 2 2
4
Note
Comment out disallow_untyped_defs = true
for mypy in setup.cfg
for
convenience
Next Step
To move on to the next step commit or stash your changes then checkout to the branch
setup/log/loguru
$ git stash
$ git checkout setup/log/loguru
Uninstall
$ poetry remove fire