目次
PyInstaller
付加コマンド
–onefile
最終的に吐き出されるファイルを、1つのexeファイルにバンドルする。
副作用として、
- コマンド終了までの処理時間が長くなる。
- exeファイルの起動までの動作が重たくなる。
等が挙げられる。
–noconsole
exeファイルの起動時に黒いコンソールを出現させなくする。
GUIを作っている場合など、コンソールでの情報表示が不要な場合に利用。
–add-data
png、jpg、ico、など各種画像ファイル、その他の非バイナリファイルをバンドルするためのコマンド。
specファイルを編集する方法もあるが、それはそれで色々面倒なので、ファイルが少なければコマンドで指定が楽。
–add-data <現在のファイルパス>;<バンドル後のファイルパス>
区切りにはセミコロンを使う。
プログラムのソースから参照している位置がずれない様に注意が必要。
色々考えるのが面倒なら直下配置 ” . ” をdist_pathに指定するのが無難。
使用例:
PyInstaller --add-data .icon1.png;. --add-data .icon2.png;.
GUIを作ってexe化した場合など、iconなどを使っている場合でも、標準の動作では画像ファイルはバンドルされない。
そのままでは配布時に画像ファイルも別途合わせて配布ZIPに織り込む必要があるので、–add-dataを使ってexeファイルにバンドルする方が見栄えが良い。
–onefileを指定して画像をバンドルしたい場合は、
import sys from pathlib import Path def resource_path(relative_path): base_path = getattr(sys, '_MEIPASS', str(Path(__file__).absolute().parent)) return str(Path(base_path).joinpath(relative_path))
–onefileを指定した場合、スクリプトで画像などのリソースを読み込む際は、この関数に通して読み込む。
PyQtでアイコンを読み込む場合の例は以下の例のようにresource_path関数を通す必要がある。
class MainWindow(QtWidgets.QMainWindow): signalStatus = pyqtSignal(str) def __init__(self, parent=None): super(self.__class__, self).__init__(parent) self.ui = Ui_MainWindow() self.setWindowIcon(QIcon(resource_path('icon.png')))
コメント