コンテンツにスキップ

第 10 章: アプリケーションの配布

素晴らしいアプリケーションが完成したら、次はそのアプリケーションを他のユーザーにも使ってもらいたいと思うでしょう。しかし、他のユーザーの PC に Python や PySide6 がインストールされているとは限りません。この章では、作成した PySide6 アプリケーションを、依存ライブラリごとまとめて単一の実行可能ファイル(Windows の.exeなど)にパッケージングする方法を学びます。

この処理には、PyInstallerというツールを使用するのが最も一般的です。

PyInstaller の導入

まずは、pip を使って PyInstaller をインストールします。

pip install pyinstaller

基本的なパッケージング

PyInstaller の最も基本的な使い方は、メインの Python スクリプトファイルを指定するだけです。

pyinstaller main.py

これを実行すると、distbuildという 2 つのフォルダが作成されます。

  • build: ビルド過程で生成される一時ファイルが格納されます。
  • dist: 配布物(アプリケーション)が格納されます。mainという名前のフォルダ(スクリプト名に由来)が作成され、その中に実行ファイルと、依存する多数のライブラリファイル(.dll.pydなど)が含まれています。

このdist/mainフォルダを丸ごと配布すれば、相手の PC でアプリケーションを実行できます。これをワンフォルダモードと呼びます。

ワンファイルモード

すべての依存ファイルを一つの実行可能ファイルにまとめることもできます。配布は簡単になりますが、起動が少し遅くなる場合があります。

pyinstaller --onefile main.py

GUI アプリケーション向けのオプション

上記のコマンドで GUI アプリをパッケージングすると、実行時に後ろで黒いコンソールウィンドウが表示されてしまいます。これを非表示にするには--windowed(または-w)オプションを追加します。

# ワンファイル、かつコンソール非表示
pyinstaller --onefile --windowed main.py

アイコンの設定

アプリケーションにカスタムアイコンを設定するには、--iconオプションを使います。

pyinstaller --onefile --windowed --icon=app.ico main.py

Windows の場合は.ico形式、macOS の場合は.icns形式のファイルが必要です。

データファイルの同梱

PyInstaller は Python のimport文を解析して依存関係を自動で検出しますが、コード内から直接パスで参照している画像ファイル、.uiファイル、QSS ファイルなどは検出できません。これらのデータファイルを同梱するには--add-dataオプションを使います。

構文: --add-data="<ソースパス>;<配布先フォルダ>" (macOS/Linux では区切り文字が;ではなく:になります)

# assetsフォルダにあるlogo.pngを、配布先のassetsフォルダに同梱する
pyinstaller --add-data="assets/logo.png;assets" main.py

注意: パッケージ化されたアプリ内からこれらのデータファイルにアクセスするには、パスの解決に工夫が必要です。実行時のパスは、スクリプトとして実行されている場合と、PyInstaller のパッケージ内で実行されている場合で異なるためです。

.specファイルによる高度な設定

コマンドラインのオプションが長くなってきたら、.specファイルを使うのがベストプラクティスです。.specファイルは、PyInstaller を最初に実行したときに自動生成される Python スクリプトで、ビルドのすべての設定情報が含まれています。

  1. pyinstaller main.py を一度実行して、main.specを生成させます。
  2. 生成されたmain.specファイルをテキストエディタで開いて編集します。

    # main.spec (抜粋・編集例)
    a = Analysis(['main.py'],
                 pathex=['C:/Users/kaiseki/MyDrive/Projects/practice-pyside6'],
                 binaries=[],
                 # データファイルを追加
                 datas=[('assets/logo.png', 'assets')],
                 # PyInstallerが見つけにくい隠れたimport
                 hiddenimports=[],
                 hookspath=[],
                 runtime_hooks=[],
                 excludes=[],
                 win_no_prefer_redirects=False,
                 win_private_assemblies=False,
                 cipher=block_cipher,
                 noarchive=False)
    pyz = PYZ(a.pure, a.zipped_data,
                 cipher=block_cipher)
    exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas,
              [],
              name='MyCoolApp',
              debug=False,
              bootloader_ignore_signals=False,
              strip=False,
              upx=True,
              upx_exclude=[],
              runtime_tmpdir=None,
              # コンソール非表示とアイコン設定
              console=False, # Trueがデフォルト
              icon='app.ico' )
    
  3. 編集した.specファイルを指定して PyInstaller を実行します。

    pyinstaller main.spec
    

.specファイルを使うことで、複雑な設定をバージョン管理でき、ビルドの再現性が高まります。

配布までのチェックリスト

  1. pip install pyinstaller で PyInstaller をインストールする。
  2. まずはシンプルなコマンドでビルドが通るか確認する。
  3. .specファイルを生成し、アイコン(icon=)、データファイル(datas=)、コンソール非表示(console=False)などの設定を追記・編集する。
  4. 最終的なビルドは.specファイルを指定して行う (pyinstaller main.spec)。
  5. distフォルダに生成されたアプリケーションを、可能であれば Python がインストールされていないクリーンな環境でテストする。

これで、あなたの PySide6 アプリケーションを友人や同僚、そして世界中の人々に届ける準備が整いました。Happy Coding!