あくまでも個人用の備忘録
はじめに
Pythonスクリプト(.py)から実行ファイル(.exe等)を生成する手段としてPyInstallerを使用した.
#実行環境
OS | Windows 10 Home |
Python | Python 3.6.9 :: Anaconda, Inc. |
pip==19.2.3 | |
PyInstaller==3.5 |
インストール方法
pip install pyinstaller
pipでインストール可能.
実行方法
pyinstaller filename.py option1 option2 ...
実行後のディレクトリ構成は以下のようになる.
├─filename.py #Pythonスクリプト
├─filename.ico #アイコン用ファイル(アイコンを設定する場合のみ用意する)
├─filename.spec
├─build
│ └─filename
├─dist
│ └─filename.exe
└─__pycache__
中間ファイルも生成される. 実行ファイルはdist下に生成される.
オプション(一部)
オプション | 概要 | |
---|---|---|
単一ファイル化 | --onefile | 関連するファイルを1つにまとめてバイナリ化 |
コンソール非表示 | --noconsole | コンソール表示をしないようにする |
Windowsバイナリ生成 | --windowed | 異なるプラットフォームでもWindowsのバイナリを作成 |
icon設定 | --icon=filename.ico | アプリケーションのアイコンを設定 |
実行ファイルにリソースを埋め込む
実行ファイルのアイコンは上記のオプションだけで設定できるが, タイトルバーやタスクバーにアイコンを表示するためには別途設定が必要である.
- Pythonスクリプト(.py)に以下のコードを追加する
import os
import sys
def icon_path(filename):
if hasattr(sys, "_MEIPASS"):
return os.path.join(sys._MEIPASS, filename)
return os.path.join(filename)
ファイルの展開先のパスが取得できる.
- タイトルバーやタスクバーのアイコンを設定しているコードを書きかえる
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setWindowIcon(QIcon(icon_path('filename.ico'))) #ココ
window = ExWindow()
sys.exit(app.exec_())
例としてPyQt5を使用している.
- 実行ファイル作成
pyinstaller filename.py --onefile --noconsole --icon=filename.ico
- filename.specを書きかえる
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['filename.py'],
pathex=['path'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
a.datas += [('filename.ico', '.\\filename.ico', 'DATA')] #コレを追加
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='filename',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False , icon='filename.ico')
- 以下のコマンドを実行
pyinstaller filename.spec
これで実行ファイルのみでタイトルバーやタスクバーにアイコンが表示されるようになる.
注意点
生成される実行ファイルは作成元OSにのみ対応するので, Windowsで動く実行ファイルを作成するためにはWindowsが必要である.