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では\
(バックスラッシュ)を指定する
頑張れば変数などを使って統一することもできそうだが、この程度であれば無理に共通化する必要もないだろう。