PyInstallerでStreamlitアプリをexe/app化する
こんにちは。 株式会社アイデミー データサイエンティストの中沢( @shnakazawa_ja )です。
みなさんは
Streamlit
をご存知でしょうか?
StreamlitとはPythonでWebアプリを作成するためのフレームワークで、
HTMLの知識無しにWebアプリを簡単に作成できる
という特長があります (
例: 公式Gallery
)。特に
適当に書いてもUIをいい感じに整えてくれる
点は素晴らしく、分析結果のインタラクティブなプロットや機械学習処理を手軽にアプリ化できるため弊社内でも大流行、仕事から趣味まで大活躍しています。
Streamlitで作ったアプリを人に使ってもらうときには基本的にはサーバーにアップロードしオンラインでアクセスしてもらう必要があるのですが、一方で
アプリをオフラインで共有したい
というニーズもニッチながら存在します。
そこで本稿では
PyInstaller
を使ってStreamlitアプリをexe/app化する
手法をご紹介します。
Python 3.10.8
streamlit 1.17.0 # 1.12.0以前だと本記事の内容は再現できません
pyinstaller 5.7.0
seaborn 0.12.2 # 本稿デモ用。アプリ化本筋とは無関係
参考記事
)
2つ目が
hiddenimports
です。アプリの実行に必要なライブラリ(streamlit標準搭載ライブラリ除く)をリスト形式で指定します。アプリを起動したときに
No Module ~~
エラーが出た場合は、ここにライブラリ名を追記して、この下の操作からやり直して下さい。(
参考記事
)
Streamlit Cloud
を使えばデプロイも比較的簡単ですし、1つだけならプライベートなアプリも無料で作成できます。)
使い勝手の面は改善できるポイントもあり、例えば、
起動時にターミナルが立ち上がらないようにする
アプリのアイコンを変える
ファイルサイズを小さくする
などは簡単に可能です。この辺りの詳細は
PyInstallerのドキュメント
や他解説記事をご参照いただければと思います。
「オフラインのアプリにはそれ用のフレームワークを」という話ではあるのですが、
UIについて考えることが少なく分析に集中できる
・
慣れ親しんだ手法で行える
という点で、オフラインでもStreamlit使う選択肢を取れるようにしておくことは有意義かもしれません。
本稿がお役に立てば幸いです。よいStreamlitライフを!
Streamlit standalone executable
Streamlit アプリを pyinstaller で .exe パッケージ化のメモ(2023/01 時点)
Python pyinstallerで実行ファイル化(exe化)
Discussion始めまして!kiryu-3と申します。こちらの記事を参考にし、Streamlitをexe化することができました!ありがとうございます!
しかし、起動時にターミナルが立ち上がらないようにしたかったため、
以下のように
--noconsoleオプションを付けたところ、エラーが発生しました。pyinstaller --onefile --additional-hooks-dir=./hooks --noconsole run_main.py --clean