この記事は David Bieber、Google Brain ソフトウェア エンジニアによる Google Developers Blog の記事 "Introducing Python Fire, a library for automatically generating command line interfaces" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
元の記事は Google オープンソース ブログに投稿されました。
今回は、Python Fireのオープンソース化についてお知らせします。Python Fire は、あらゆる Python コードからコマンドライン インターフェース(CLI)を生成します。Python プログラムから Fire 関数を呼び出すだけで、自動的にそのプログラムが CLI に変換されます。このライブラリは、「pip install fire」を実行することで pypiからインストールできます。ソースは GitHubで公開されています。
Python Fire は、自動的にコードを CLI に変換しますので、CLI を定義するコードを書く必要がありません。引数の定義も、ヘルプ情報の設定も、コードの実行方法を定義するメイン関数も不要です。単にメイン モジュールから「Fire」関数を呼び出せば、後のことは Python Fire が行ってくれます。Python Fire は、インスペクションを利用して、クラス、オブジェクト、ディクショナリ、関数、モジュール全体など、指定された Python オブジェクトをコマンドライン インターフェースに変換します。変換後の CLI には、タブ補完機能やドキュメントも付属しており、コードが変更された場合はそれに応じて CLI も更新されます。
簡単な実例を見てみましょう。
Fire 関数の実行により、コマンドが実行されます。Fire を呼び出すだけで、Example クラスをコマンドライン ユーティリティのように使えるようになります。
$ ./example.py hello
もちろん、このモジュールは通常の Python ライブラリとして使うこともできるので、Bash と Python の両方からまったく同じコードを使うことができます。Python ライブラリを書いている際に Python Fire を使うと、コマンドラインから対象ライブラリの一部を実行して簡単に実験できるようになるので、メインメソッドやクライアントをアップデートする必要がなくなります。また、ライブラリを変更すると、それに応じてコマンドライン ツールも更新されます。
Google のエンジニアは、Python Fire を使って Python ライブラリからコマンドライン ツールを生成しています。たとえば、Fire と Python Imaging Library(PIL)を使って構築したイメージ操作ツールがあります。Google Brain では、Fire で構築した実験管理ツールが使われており、Python からでも Bash からでも同じように実験を管理できるようになっています。
Fire によって生成される CLI はインタラクティブモードにも対応しています。CLI に「--interactive」フラグをつけて実行するとコマンドの結果とともに IPython の REPL が起動し、その他の便利な定義済み変数をすぐに使用できます。詳細および Fire が提供するその他の便利な機能については、Python Fire のドキュメントをご覧ください。
強力でシンプル、かつ汎用性の高い Python Fire が皆さんのプロジェクトに役立つライブラリになることを期待しています。
Posted by Ian Lewis, Developer Advocate, Google Cloud
元の記事は Google オープンソース ブログに投稿されました。
今回は、Python Fireのオープンソース化についてお知らせします。Python Fire は、あらゆる Python コードからコマンドライン インターフェース(CLI)を生成します。Python プログラムから Fire 関数を呼び出すだけで、自動的にそのプログラムが CLI に変換されます。このライブラリは、「pip install fire」を実行することで pypiからインストールできます。ソースは GitHubで公開されています。
Python Fire は、自動的にコードを CLI に変換しますので、CLI を定義するコードを書く必要がありません。引数の定義も、ヘルプ情報の設定も、コードの実行方法を定義するメイン関数も不要です。単にメイン モジュールから「Fire」関数を呼び出せば、後のことは Python Fire が行ってくれます。Python Fire は、インスペクションを利用して、クラス、オブジェクト、ディクショナリ、関数、モジュール全体など、指定された Python オブジェクトをコマンドライン インターフェースに変換します。変換後の CLI には、タブ補完機能やドキュメントも付属しており、コードが変更された場合はそれに応じて CLI も更新されます。
簡単な実例を見てみましょう。
#!/usr/bin/env python
import fire
classExample(object):
def hello(self, name='world'):
"""Says hello to the specified name."""
return'Hello {name}!'.format(name=name)
def main():
fire.Fire(Example)
if __name__ == '__main__':
main()
Fire 関数の実行により、コマンドが実行されます。Fire を呼び出すだけで、Example クラスをコマンドライン ユーティリティのように使えるようになります。
$ ./example.py hello
Hello world!
$ ./example.py hello David
Hello David!
$ ./example.py hello --name=Google
Hello Google!
もちろん、このモジュールは通常の Python ライブラリとして使うこともできるので、Bash と Python の両方からまったく同じコードを使うことができます。Python ライブラリを書いている際に Python Fire を使うと、コマンドラインから対象ライブラリの一部を実行して簡単に実験できるようになるので、メインメソッドやクライアントをアップデートする必要がなくなります。また、ライブラリを変更すると、それに応じてコマンドライン ツールも更新されます。
Google のエンジニアは、Python Fire を使って Python ライブラリからコマンドライン ツールを生成しています。たとえば、Fire と Python Imaging Library(PIL)を使って構築したイメージ操作ツールがあります。Google Brain では、Fire で構築した実験管理ツールが使われており、Python からでも Bash からでも同じように実験を管理できるようになっています。
Fire によって生成される CLI はインタラクティブモードにも対応しています。CLI に「--interactive」フラグをつけて実行するとコマンドの結果とともに IPython の REPL が起動し、その他の便利な定義済み変数をすぐに使用できます。詳細および Fire が提供するその他の便利な機能については、Python Fire のドキュメントをご覧ください。
強力でシンプル、かつ汎用性の高い Python Fire が皆さんのプロジェクトに役立つライブラリになることを期待しています。
Posted by Ian Lewis, Developer Advocate, Google Cloud