PyInstallerの使い方|Pythonをexe化する方法

スポンサーリンク

この記事では、PythonのPyInstallerの目的と基本的な使い方を学びます。

スポンサーリンク

PyInstallerとは?

PyInstallerは、Pythonアプリケーションの依存関係をすべて1つのパッケージにバンドルするPythonのパッケージです。


アプリケーションごとに異なるパッケージやモジュールをインストールする必要はありません。

PyInstallerはコードを読み込んで分析し、プログラムが実行するために必要なモジュールを見つけます。

そして、それらを1つのフォルダまたは1つの実行ファイルにパッケージ化します。

Windowsでは.exeファイル、Macでは.appファイル、Linuxでは配布可能なパッケージの作成に使用されます。

PyInstaller をインストールするには?

PyInstallerはPyPIからダウンロードできます。

pipパッケージマネージャを使用してインストールできます。

仮想環境を作成し、そこにPyInstallerをインストールすることが推奨されます。

Windowsのコマンドプロンプトで以下のコマンドを入力します。

pip install pyinstaller

カレントディレクトリをプログラムprogram.pyがある場所に設定します。

cd CurrentDirectory

以下のコードを実行します。

ここで、program.py は与えられた python スクリプトの名前です。

pyinstaller program.py

PyInstaller はコードを解析して、次のことを行います。

    1. パックアップされるべきファイルに関する情報を含む program.spec ファイルを作成します。
    1. build フォルダが作成され、ログファイルや作業ファイルが格納されます。
    1. distというフォルダも作成され、そこには与えられたpythonスクリプト名と同じ名前の.exeファイルが含まれます。

さて、PyInstaller を使用する上で重要な要素が3つあります。

  • .spec ファイル
  • ビルドフォルダ
  • dist フォルダ

スペックファイルとは?

Spec ファイルとは、spec ファイルを省略したもので、pyinstaller program.py の実行後に最初にビルドされるファイルです。

specpath= ディレクトリ`に格納されます。

spec ファイルは実行可能な Python コードで、Pyinstaller に Python スクリプトをどのように処理するかを指示します。


spec ファイルを修正する必要はありませんが、以下のような場合に便利です。

    1. データファイルをアプリにバンドルします。
    1. PyInstaller にとって未知のランタイムライブラリをインクルードします。
  1. Pythonのランタイムオプションを実行ファイルに追加します。
    1. 共通モジュールをマージしたマルチプログラムバンドルを作成します。

spec ファイルを作成するには、次のコマンドを実行します。

pyi-makespec program.py

このコマンドを実行すると、program.py という spec ファイルが作成されます。

アプリケーションをビルドするために、この spec ファイルを pyinstaller コマンドに渡します。

pyinstaller program.spec

ビルドフォルダって何?

build フォルダはメタデータを保存し、デバッグに便利です。

build/ フォルダにある build/program/warn-program.txt ファイルには、物事をよりよく理解するための出力がたくさん含まれています。

この出力を確認するには、--log-level=DEBUGオプションを付けて実行ファイルをリビルドしてください。

この出力は、後で参照するために保存しておくことをお勧めします。

これを行うには、次のようにします。

pyinstaller --log-level=DEBUG program.py

これは build フォルダに build.txt ファイルを作成し、多くの DEBUG メッセージを含むようにします。

dist フォルダは何ですか?

dist フォルダには、アプリケーションの要件と実行ファイルが含まれています。

私たちのスクリプトと同じ名前の .exe ファイルが含まれています。

実行する実行ファイルは、Windowsではdist/program/program.exeです。

ImportError とは何ですか?

PyInstallerがすべての依存関係を適切に検出できない場合、ImportErrorエラーが表示されます。

これは __import__( ).関数内のインポートや隠されたインポートを使用したときに発生します。

これを解決するには、 --hidden-import を使用します。

このコマンドはパッケージとモジュールを自動的に含めます。

もう一つの方法は、PyInstaller が依存関係をパッケージ化するのを助ける追加情報を含むフックファイルを使うことです。

pyinstaller --additional-hooks-dir=. program.py

PyInstaller を使って実行ファイルの名前を変更するには?

spec やビルド、実行ファイルの名前が Python スクリプトの名前と同じにならないようにするには、-name コマンドを使用します。

pyinstaller program.py --name pythonproject

How to create single executable file?

PyInstaller は Python スクリプトのための単一ファイルアプリを作成することもできます。

このアプリには、Python プログラムに必要なすべての Python モジュールのアーカイブが含まれています。

Python スクリプトの実行ファイルを 1 つだけ作成するには、以下のコードを実行します。

pyinstaller --onefile --windowed program.py

実行ファイルのテスト

PyInstallerの実行ファイルの主な目的は、ユーザーがシステムに何もインストールする必要がないことなので、virtualevやcondaなどの開発環境なしで常に新しいマシンで実行ファイルをテストする必要があります。

さて、実行ファイルを実行した後、以下のエラーが発生しました。

FileNotFoundError: 'version.txt' resource not found in 'importlib_resources'

importlib_resources’ が version.txt ファイルを必要とするためです。

このファイルは、以下のコマンドで追加することができます

pyinstaller program.py
    --add-data venv/reader/lib/python3.6/site-packages/importlib_resources/version.txt:importlib_resources

importlib_resourcesフォルダの新しいフォルダにversion.txtファイルが追加されます。

まとめ

この記事では、PyInstallerのインストール、実行、デバッグ、実行ファイルのテスト方法について学びました。

ご期待ください。

参考文献

PyInstaller 公式ドキュメント

タイトルとURLをコピーしました