多くの異なるコマンド (image-magick など) を備えた大きな CLI アプリケーションがあるとします。
このアプリケーションをモジュールなどに整理したかったので、click.group
どこかにマスターがあります。
#main.py file
@click.group()
def my_app():
pass
if __name__ == "__main__":
my_app()
コマンドを定義する各モジュールにインポートできます。
from main import my_app
# command_x.py
@my_app.command()
def command_x():
pass
main.py
問題は、ファイルが何も認識しておらずcommand_x.py
、メイン セクションを呼び出す前にインポートする必要があるため、循環インポートの問題が発生することです。
これは Flask でも発生し、通常はアプリ ファクトリ パターンで処理されます。通常、ビューの前にアプリを作成します。
app = Flask("my_app")
@my_app.route("/")
def view_x():
pass
if __name__ == "__main__":
app.run()
アプリ ファクトリ パターンでは、ブループリントの「登録」を延期します。
# blueprints.py
blueprint = Blueprint(yaddayadda)
@blueprint.route("/")
def view_x():
pass
そして、アプリをビルドしてブループリントを登録する方法を知っているファクトリを作成します。
#app_factory.py
from blueprints import view_x
def create_app():
app = Flask()
view_x.init_app(app)
return app
そして、アプリを実行するスクリプトを作成できます。
#main.py
from app_factory import create_app
if __name__ == "__main__":
app = create_app()
app.run()
クリックで同様のパターンを使用できますか? click.Group
個々のコマンドである「コントローラー」を登録する「クリックアプリ」(おそらく拡張)を作成できますか?