設計上、Python 3は相対インポートを含むモジュールをスクリプトとして実行できません。そうしようとすると、次のエラーが発生します。
$ python mypackage/run.py
[...traceback...]
SystemError: Parent module '' not loaded, cannot perform relative import
python -m mypackage.run
解決策は、より使い慣れた の代わりに でモジュールを呼び出すことですpython mypackage/run.py
。
Flask では、後者が通常の開発サーバーの実行方法です。ただし、Flask 開発サーバーは、コードをリロードする子プロセスをすぐに生成します (その後、ディスク上でファイルが変更されると、コードをリロードします)。
結果は次のとおりです。
$ python -m mypackage.run
* Running on http://127.0.0.1:5000/
* Restarting with reloader
[...traceback...]
SystemError: Parent module '' not loaded, cannot perform relative import
そのため、サーバーは適切に起動しますが、子プロセスはコードを不適切にリロードします。