StreamlitのアプリをPyInstaller+GitHub Actionsでビルドする

Table of Contents

概要

Streamlitで作ったPythonのアプリを頒布するため、WindowsやMacで実行可能な形式でビルドしたい。
そのためGitHub ActionsでPyInstallerを使おうと考えたが、意外とハマりどころが多かったので書き残しておく。

実装サンプル

今回のサンプルで目指したのは以下。実装サンプルはこちら

  • 構成管理:uv
  • ビルド環境:GitHub Actions
  • Windows/Macについて、それぞれ実行可能な形式を作成
  • collect-dataを使用する
  • add-dataを使用する

--collect-data--add-dataの使用例としてdotenvライブラリを採用し、.envファイルを含めるようにしている。

以下は、実装する上でハマった箇所などのメモ。

Streamlit Desktop Appを使うことで、シンプルに実装する

PyInstallerでStreamlitをビルドしようとした前例はありそうだが、実際にやってみるとエラーなどに悩まされる。
そしていろいろ調べていたところ、先人がStreamlit Desktop Appを作ってくれているので、感謝しつつこれを使う。

PyInstallerのオプションを必要に応じて追加する

Streamlit Desktop Appでは、PyInstallerのオプションを--pyinstaller-options以下に指定することができる。
そのためビルド中にエラーが発生した場合は、必要に応じてライブラリを--collect-allで指定すればよいし、 実行時に必要なデータがあれば--add-dataで指定することで含めることができる。

Windows/Macの差異に合わせて、実行するコマンドを指定する

Windows/Macでは環境や指定方法に微妙な差異があるため、GitHub Actionsでは異なるコマンドを指定する。

Windows/Mac向けに実行するコマンドの違いは以下の通り。

  • --add-dataで指定する際、Windowsでは;(セミコロン)、Macでは:(コロン)を指定する
  • コマンド内で改行する際、Windowsでは`(バッククオート)、Macでは\(バックスラッシュ)を指定する

頑張れば変数などを使って統一することもできそうだが、この程度であれば無理に共通化する必要もないだろう。

関連記事


  1. TerraformでGitHub ActionsのIPリストを参照する
  2. Dependency Review Actionのライセンスチェック機能に関する調査メモ
  3. 他の人には読めない形式でGitHubのSecretsの値を読み出す
  4. GitHub Actionsでプルリクのコメントに複数行テキストを投稿する
  5. GitHub Actionsでエラーの時だけ特定の処理を実行する
  6. GitHub Copilot Coding Agentで消費するプレミアムリクエスト等を集計してみた
  7. GitHub Copilot Coding Agentを試してみた