1
0

Streamlitでpage_linkを使おうとしたらStreamlitAPIExceptionで怒られた話

Posted at

Streamlitでpage_linkを使おうとしたらStreamlitAPIExceptionで怒られた話

Streamlitは、データサイエンスと機械学習向けのアプリケーションを簡単に作成できるフレームワークです。今回は、異なるページ間でのナビゲーションを実装しようとしたらエラーが発生して仕様の理解に詰まったため、備忘録もかねてまとめてみます。この記事では、page_linkを使ってページ間リンクを設定しようとした際に遭遇したStreamlitAPIExceptionエラーのトラブルシューティングプロセスについて紹介します。

発生した問題

page_linkを使用したら、以下のようなエラーメッセージに直面しました。

StreamlitAPIException: Could not find page: ./movie_app/app.py. Must be the file path relative to the main script, from the directory: ocam_app. Only the main app file and files in the pages/ directory are supported.

Traceback:
File "/home/kinoshita/ocam_app/app.py", line 5, in <module>
    st.page_link("./movie_app/app.py", label="映画レビュー分析アプリ", icon="🎬")

トラブルシューティング

ファイルパスの確認

まず、指定したファイルパスが正しいかを確認しました。ファイルパスに問題はなく、movie_app/app.pyは存在しています。しかし、Streamlitはこのファイルをページとして認識していませんでした。

pagesディレクトリの利用

Streamlitの仕様上、ページ間ナビゲーションはpagesディレクトリを通じて管理されます。そこで、pagesディレクトリを作成し、movie_appフォルダをpagesディレクトリに移動してみましたが、認識せず。結果として、pagesディレクトリの直下に、pythonファイルを設置しないとしないことがわかりました。

シンボリックリンクの試み

直下に配置する前に、movie_appフォルダをpagesディレクトリにシンボリックリンクとして追加する方法を試みましたが、先ほどの結論通りうまくいきませんでした。

結論

最終的にわかったこととしては、基点となるapp.pyと同じ階層にpagesディレクトリを作成し、その中にpythonファイルを直接入れる形が必須なようですね。

project_root/

├── app.py

└── pages/
    ├── movie_app.py
    └── (他のページ用Pythonファイル)

基本的にpagesディレクトリを作成するとサイドバーにリンクが自動表示されます。その機能を使う形としてのみ利用できるイメージですね...

今回の私が作っているアプリは独立したものを一つのページにまとめたりしたいだけなので、この機能よりlink_buttonを使って外部リンク扱いした方がいいかもしれません。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0