PR Python全般 ライブラリ

【PyInstallerの使い方】Pythonでの実行ファイル作成(exe化)方法を徹底解説!

2024年3月16日

※本サイトの記事には、アフィリエイト広告が含まれる場合があります。

pyinstallerの使い方
  • Pythonのプログラムを実行するのにコマンドプロンプトを起動するのがめんどくさい。
  • Pythonで作ったツールを他の人と共有したいけど、相手のPCにPythonが入っていない。
  • 副業で自動化ツールを作成して販売したいけど、ソースコードは提供したくない。

こんな悩みを解決します!!

Pythonで自動化ツールを作成したあと、そのツールを他の人と共有したい場面ってありますよね。

その時に活躍するのが、「PyInstaller」です。

PyInstallerを使えば、Pythonプログラムを簡単に実行ファイルに変換することができます。

私は副業でツール作成依頼を受けたときは、PyInstallerで作成した実行ファイルを納品しています。

本記事では、PyInstallerを使って、実行ファイル(exeファイル)を作成する方法をわかりやすく解説します。

この記事を読めば、初心者でも簡単に実行ファイルを作成して、ツールを配布・共有することができるようになります。


\ 学習時間をムダにしたくないなら /

おすすめオンラインスクール

Pythonを効率的に学習するには、オンラインスクールを活用するのがおすすめです。

おすすめオンラインスクールはこちらの記事で紹介しています。
 ⇒ これで決まり!Pythonオンラインスクール おすすめ3社を厳選!

PyInstallerとは

PyInstallerとは、Pythonプログラムをexeファイルに変換するツール

PyInstallerは、Pythonプログラムを単体で実行可能なファイルに変換するためのツールです。

読み方は「パイインストーラー」です。

PyInstallerを使用することで、PythonがインストールされていないPCでもPythonで作成したツールを実行できるようになります。

WindowsやMac OS、Linuxなど、複数のOSに対応した実行ファイルを作成できます。

Pyinstaller公式サイト

ライブラリのインストール

PyInstallerをインストールしていない方は、下記コマンドをコマンドプロンプトで実行しましょう。

pip install pyinstaller

ライブラリの使用方法

PyInstallerは基本的にコマンドプロンプトで使用します。

プログラムから実行ファイルを作成する時は下記コマンドを実行します。

pyinstaller プログラム名.py

事前にプログラムが保存されているディレクトリに移動してください。

実行ファイルは「dist」フォルダの中に保存されています。

windowsの場合、「プログラム名」フォルダの中にある実行ファイル「プログラム名.exe」をダブルクリックすると、プログラムを実行することができます。

後で紹介する「--onefile」オプションを使用した場合、「dist」フォルダの直下に実行ファイル「プログラム名.exe」が作成されています。

PyInstallerのオプション

PyInstallerには、実行ファイル作成の詳細を指定するために、いくつもオプションが用意されています。

オススメのオプションは次の通りです。

  • --clean
  • --onefile
  • --exclude-module
  • --noconsole
  • --icon

--clean

実行ファイルを作成する前にPyInstallerのキャッシュを削除します。

余計な一時ファイルが残っていることで、不具合の原因になることもあるので、使用することをオススメします。

pyinstaller プログラム名.py --clean

--onefile

Pythonプログラムとライブラリなどを1つのファイルにまとめることができます。

デメリットとして、作成された実行ファイルは起動が遅くなります。

pyinstaller プログラム名.py --onefile

--exclude-module

実行ファイル作成時に除外するライブラリ、モジュールを指定することができます。

PyInstallerで作成した実行ファイルはファイルサイズを小さくしたいときに便利です。

pyinstaller プログラム名.py --exclude-module ライブラリ名

--noconsole

作成した実行ファイルを実行したときに、コンソールウィンドウを開かないようにすることができます。

tkinterで個別にウィンドウを作成している時に使用します。

pyinstaller プログラム名.py --noconsole

--icon

実行ファイルのアイコンを指定することができます。

pyinstaller プログラム名.py --icon 画像.ico

オプションは同時に使うことが可能です。

同時に使う場合は、後ろに追加するだけでOKです。オプションの順番に制約はありません。

例えば「--clean」と「--onefile」を同時に使用する場合は下記のように記入します。

pyinstaller プログラム名.py --clean --onefile

その他のオプションについては、公式サイトで確認できます。

PyInstaller specファイルの活用

specファイルとは実行ファイルを作成する際に使われる設定ファイルのこと

specファイルを使用すると、実行ファイルの作成時の設定を細かく指定することができます。

PyInstallerを実行したときに、specファイルが最初に作成されます。

Pythonファイルと同じ名前がつけられます。例えばPythonファイルが「main.py」の場合、「main.spec」というファイル名で作成されます。

specファイルには、作成する実行ファイルに含めるモジュールや設定情報が記述されています。

PyInstallerのオプションについても記載されていて、specファイルを修正することで簡単にオプション詳細を変更することができます。

具体的には下記のような設定を記述することができます。

  • スクリプトの依存関係やライブラリ
  • 追加ファイルやデータ
  • 実行ファイルのアイコンやバージョン情報
  • パッケージ化の方法(onefileまたはonedir)
  • 隠しインポートやフックのカスタマイズ

specファイル 使用方法

まずはspecファイルを作成します。

specファイルを作成する方法は下記の2つがあります。

  • 「pyinstaller」コマンドを使用する
  • 「pyi-makespec」コマンドを使用する
pyinstaller プログラム名.py

このコマンドでは、specファイルを作成した後、実行ファイルまで作成します。

pyi-makespec プログラム名.py

このコマンドでは、specファイルのみ作成します。実行ファイルを作成しないため、短時間で処理を終えることができます。

specファイルを使用することが決まっている場合は、pyi-makespecの使用がオススメです。

必要に応じて、specファイルの内容を修正します。

specファイルを使用して、実行ファイルを作成するときは、次のように記入します。

pyinstaller プログラム名.spec

specファイル 内容

specファイルについての詳細は、公式サイトで確認することができます。

specファイルはテキストエディタで確認することができます。

「main.py」から作成したspecファイルは次のようになります。

# -*- mode: python ; coding: utf-8 -*-


a = Analysis(
    ['main.py'],
    pathex=[],
    binaries=[],
    datas=[],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='main',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)

Analysisの内容は次の通りです。

  • ['main.py']:実行するメインのPythonスクリプトを指定します。
  • pathex=[]:スクリプトを探索するパスのリスト。デフォルトは空リストで、カレントディレクトリが使われます。
  • binaries=[]:追加のバイナリファイルを指定します。
  • datas=[]:追加のデータファイル(例: CSV、画像ファイル)を指定します。
  • hiddenimports=[]:PyInstallerが自動的に検出できないインポートをリストで指定します。
  • hookspath=[]:フックファイル(特定のモジュールのためのカスタム設定)のパスを指定します。
  • hooksconfig={}:フックの詳細設定を行います。
  • runtime_hooks=[]:実行時に必要なフックを指定します。
  • excludes=[]:含めたくないモジュールをリストで指定します。
  • noarchive=False:Trueにすると、アーカイブを作成せずに個別のファイルとして保存します。

EXEの内容は次の通りです。

  • pyz:PYZオブジェクト。前のセクションで作成されたPythonアーカイブ。
  • a.scripts:Analysisセクションで収集されたスクリプトファイル。
  • a.binaries:Analysisセクションで収集されたバイナリファイル。
  • a.datas:Analysisセクションで収集されたデータファイル。
  • name='main':出力ファイル名(拡張子はOSによって自動的に付与されます)。
  • debug=False:デバッグモードを有効にするかどうか。
  • bootloader_ignore_signals=False:ブートローダーがシグナルを無視するかどうか。
  • strip=False:実行ファイルからデバッグ情報を削除するかどうか。
  • upx=True:UPXを使って実行ファイルを圧縮するかどうか。
  • upx_exclude=[]:UPX圧縮から除外するファイルのリスト。
  • runtime_tmpdir=None:一時ディレクトリのパスを指定。
  • console=True:コンソールウィンドウを表示するかどうか。GUIアプリケーションの場合はFalseに設定します。
  • disable_windowed_traceback=False:ウィンドウ化されたトレースバックを無効にするかどうか。
  • argv_emulation=False:argvエミュレーションを行うかどうか(Mac OSのみ)。
  • target_arch=None:ターゲットアーキテクチャを指定。
  • codesign_identity=None:コード署名のID(Mac OSで使用)。
  • entitlements_file=None:エンタイトルメントファイルのパス(Mac OSで使用)。

設定できる項目は多いですが、よく使用する項目はAnalysisの2項目になります。

  • binaries=[]:追加のバイナリファイルを指定します。
  • datas=[]:追加のデータファイル(例: CSV、画像ファイル)を指定します。

この項目で、プログラムにデータや外部プログラムを追加することができます。

例えば、画像から文字を認識する「tesseract-ocr」を実行ファイルに含めるときに使用します。

データを追加するときは次のように記入します。

binaries=["追加するファイル、フォルダのパス","ファイルを格納するフォルダ名"],
datas=["追加するファイル、フォルダのパス","ファイルを格納するフォルダ名"],

「tesseract-ocr」を実行ファイルに追加する方法をこちらで紹介しています。
 ⇒【pyinstaller】tesseract-ocrを同封して、1つのexeファイルを作成する方法を解説!

PyInstallerによるexe化のメリット、デメリット

メリット

  • Pythonがインストールされていない環境でも実行可能
  • プログラムを配布・共有しやすい
  • ソースコードを隠蔽できる

デメリット

  • ファイルサイズが大きくなる
  • 起動時間が遅くなる可能性がある
  • windows、mac、Linuxで相互に互換性がない

メリット

Pythonがインストールされていない環境でも実行可能

PyInstallerは、Pythonプログラムとすべての必要なライブラリをまとめて1つの実行ファイルにパッケージ化します。

そのため、PyInstallerで実行ファイルを作成することで、Pythonがインストールされていない環境でもアプリケーションを実行することができます

プログラムを配布・共有しやすい

PyInstallerでは、プログラムをまとめて1つのファイルにしているため、プログラムの配布や共有を簡単に行うことができます。

実行ファイルを受け取った人は、そのファイルを実行するだけでOKです

ソースコードを隠蔽できる

PyInstallerを使うと、プログラムが実行ファイルに含まれるため、ソースコードを隠蔽することができます。

知的所有権の保護やセキュリティ上の理由で、ソースコードを公開したくない場合に便利です。

デメリット

ファイルサイズが大きくなる

PyInstallerで作成された実行ファイルには、Pythonプログラムだけでなく、すべてのライブラリがパッケージ化されています。

そのため、ファイルサイズが大きくなる傾向にあります。

特に、多くの外部ライブラリを使用しているアプリケーションの場合、ファイルサイズが非常に大きくなる可能性があります。

起動時間が遅くなる可能性がある

PyInstallerで作成された実行ファイルを起動すると、実行ファイル内のデータを一度解凍して読み込みます。

その解凍プロセスがあるため、実行ファイルの起動時間は、インタープリタモードで実行するよりも若干遅くなる可能性があります。

windows、mac、Linuxで相互に互換性がない

PyInstallerで作成された実行ファイルは、作成されたプラットフォームでのみ実行可能です。

例えば、Windowsで作成されたファイルはWindowsでのみ実行できます。

そのため、別のプラットフォームを使用している人にプログラムを配布、共有することができません

プログラムを配布・共有するときには注意しましょう。

PyInstaller使用時のテクニック

実行ファイルの軽量化には仮想環境を使用する

PyInstallerを使用するときは、仮想環境を使用することをオススメします。

PyInstallerで作成された実行ファイルには、Pythonプログラムだけでなく、すべてのライブラリが含まれます。

そのため、作成された実行ファイルのサイズが大きくなる傾向があります。

仮想環境で必要なライブラリのみをインストールした状態で、実行ファイルを作成すれば、最小限のファイルサイズにすることができます

Pythonの仮想環境については、こちらの記事で解説しています。
 ⇒【Python仮想環境】初心者でもできるvenvによる仮想環境作成方法を解説!

コンソールがすぐに消えないようにする

print文での出力があるプログラムを実行ファイルにして起動すると、コンソールが一瞬だけ開いて、すぐに消えてしまいます。

処理の出力結果を見たくても、ほぼ見ることはできません。

コンソールをすぐに消えないようにする手段として、入力待ちにする方法があります。

Pythonのプログラムに下記を追加します。

input()

inputを入れることで、入力があるまでコンソールは消えません。

下記ように、コメントを入れておくと、わかりやすいのでオススメです。

input("コンソールを消すためには、エンターを押してください")

Q&A

PyInstallerとは何ですか?

PyInstallerは、Pythonプログラムを単体で実行可能なファイルに変換するためのツールです。

PyInstallerを使用することで、PythonがインストールされていないPCでもPythonで作成したアプリを実行できるようになります。

PyInstallerはどのOSに対応していますか?

PyInstallerはWindows、macOS、Linuxを含む主要なオペレーティングシステムに対応しています。

ただし、生成される実行ファイルは、それを作成したプラットフォームでのみ実行可能です。

PyInstallerで作成されるファイルはどこに保存されますか?

「dist」フォルダの中に保存されています。

まとめ

本記事では、PyInstallerを使って、実行ファイルを作成する方法をわかりやすく解説しました。

PyInstallerはプログラムの配布・共有をするときに、とても便利なツールです。

副業としてPythonで自動化ツールを作成するときも活躍しますので、ぜひ使い方をマスターしてください。

Pythonで自動化ツールを作成する手順については、こちらの記事で解説しています。

自動化ツールはGUIアプリにすると、とても使いやすくなります。

GUIアプリを作成するときは、Tkinterを使用します。Tkinterについては、こちらの記事で解説しています。

Pythonを効率的に学習するために

Pythonの学習方法は、書籍やyoutube、スクールなどがありますが、一番のおすすめはオンラインスクールでの学習です。

オンラインスクールを勧める理由は以下の通り。

  • 学習カリキュラムが整っているので、体系的に学ぶことができる。
  • 時間や場所を選ばずに、自分のペースで学習できる。
  • 学習で詰まったときに、気軽に質問できる環境がある。

オンラインスクールについてはコチラの記事で紹介しています。
 ⇒ これで決まり!Pythonオンラインスクール おすすめ3社を厳選!

2024年10月1日から給付制度が拡充され、最大80%給付されるスクールもあります。

Python学習を効率的に進めるために、スクールの検討をしてみてください。

おすすめオンラインスクール

コスト重視:デイトラ
AIスキル重視Aidemy PREMIUM
転職重視:キカガク


最後まで読んでいただきありがとうございます!

ご意見、ご感想があれば、コメントを頂けるとうれしいです!!

  • この記事を書いた人

よすけ

☆Pythonプログラマー ☆副業で業務改善ツール作成実績あり ☆noteでサンプルコード公開中 https://note.com/pythonsoba ☆デイトラPythonコース受講 ☆A.I.、機械学習を日々勉強中 ☆基本情報技術者、ソフトウェア開発技術者 取得 ☆趣味はスノーボード、ボルダリング、ドライブ

-Python全般, ライブラリ
-,

業務効率化ツールのサンプルコードを多数公開中!
サンプルコードをみる
業務効率化ツールのサンプルコードを多数公開中!
コードをみる