Pythonで簡単にwebアプリケーションやダッシュボードの作成が行えるpanelライブラリ。
今回はpanelで作成したアプリケーションをDjango3で動かしてみたくなったので、公式のDocumentationを参考にやってみました.
公式の説明はDjango2を対象としていて,Django3で動かす場合は色々とつまずく点があったので備忘録として残します.
公式Documentation
完成図
以下のような感じでpanelで作成したデモアプリケーションをDjango上で表示します
環境構築
pythonのバージョンは3.8.13を使用
その他ライブラリのバージョンはpanel/examples/apps/django_multi_apps/requirements.txtを参考にしてください(バージョン依存が激しいので注意)
githubにDjangoの設定ファイル・HTMLテンプレートPanelのデモアプリケーションがあるので、このdjango_multi_appsフォルダをダウンロードし
cd django_multi_apps
python manage.py runserver
でDjangoのサービスを起動する.
するとおそらく下記のエラーが表示されると思います.
File "/Users/junya/opt/miniconda3/envs/panelqiita/lib/python3.8/site-packages/django/apps/config.py", line 38, in __init__
raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: The app label 'bokeh.server.django' is not a valid Python identifier.
ググったところ,Django3でPanelを動かす場合にはDjango本体のコードを,下記のように一部書き換える必要があるとのことでした.
#miniconda3/envs/[仮想環境名]/lib/python3.8/site-packages/bokeh/server/django/apps.pyを書き換える
## 変更前
class DjangoBokehConfig(AppConfig):
name = label = 'bokeh.server.django'
_routes: Optional[RoutingConfiguration] = None
## 変更後
class DjangoBokehConfig(AppConfig):
name = 'bokeh.server.django'
label = 'bokeh_server_django'
_routes: Optional[RoutingConfiguration] = None
これに伴ってdjango_multi_apps/urls.pyとrouting.pyも以下のように . を _ に変更する必要があります
###django_multi_apps/urls.py 29行目
## 変更前
from .themes import plot_themes
pn_app_config = apps.get_app_config('bokeh.server.django')
## 変更後
from .themes import plot_themes
pn_app_config = apps.get_app_config('bokeh_server_django')
###django_multi_apps/routing.py 5行目
## 変更前
bokeh_app_config = apps.get_app_config('bokeh.server.django')
## 変更後
bokeh_app_config = apps.get_app_config('bokeh_server_django')
公式のデモは基本的にDjango2を対象としているのでこんなことになっているようです。
変更後に再度Djangoを起動してみます
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
Django version 3.2, using settings 'django_multi_apps.settings'
Starting ASGI/Channels version 2.4.0 development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
今度は500エラーが返ってきました.migrateするよう警告が出ていたので,
python manage.py migrate
でmigrateして再度起動してみます.
今度はpanelで作成したアプリケーションが表示されました.
デモアプリは3つとも上手く表示できているようです.
なんとかDjango3でpanelを動かすことができましたがライブラリの依存関係がかなり厳しいので実用は難しいかもしれません...
誰かのお役に立てば幸いです