相关文章推荐
打盹的灭火器  ·  蒙特卡洛法 ...·  2 年前    · 
Zenn
📊

PyInstallerでStreamlitアプリをexe/app化する

Shingo Nakazawa 2023/02/08 に公開 2

こんにちは。 株式会社アイデミー データサイエンティストの中沢( @shnakazawa_ja )です。

みなさんは Streamlit をご存知でしょうか?
StreamlitとはPythonでWebアプリを作成するためのフレームワークで、 HTMLの知識無しにWebアプリを簡単に作成できる という特長があります ( 例: 公式Gallery )。特に 適当に書いてもUIをいい感じに整えてくれる 点は素晴らしく、分析結果のインタラクティブなプロットや機械学習処理を手軽にアプリ化できるため弊社内でも大流行、仕事から趣味まで大活躍しています。

Streamlitで作ったアプリを人に使ってもらうときには基本的にはサーバーにアップロードしオンラインでアクセスしてもらう必要があるのですが、一方で アプリをオフラインで共有したい というニーズもニッチながら存在します。
そこで本稿では PyInstaller を使ってStreamlitアプリをexe/app化する 手法をご紹介します。

  • Windowsで作ったアプリはWindowsで、Macで作ったアプリはMacでしか開けません。
  • Mac間でも M1 MacとIntel Macの間では互換性が無い ようです。
  • 本記事では以下のバージョンのPython/ライブラリを使用しています。
  • 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化)
  • Aidemy Tech Blog

    Discussion

    kiryu-3 kiryu-3

    始めまして!kiryu-3と申します。

    こちらの記事を参考にし、Streamlitをexe化することができました!ありがとうございます!
    しかし、起動時にターミナルが立ち上がらないようにしたかったため、
    以下のように --noconsole オプションを付けたところ、エラーが発生しました。
    pyinstaller --onefile --additional-hooks-dir=./hooks --noconsole run_main.py --clean