Python

PyInstallerを使ったEXEファイルや実行ファイル化を解説

2021年10月12日

PyInstallerを使ったEXEファイルかと実行ファイルの作成を解説

Pythonで実行ファイルを作成してみました。

作成するにはPyInstallerを使ってみましたが、MacではWindowsのEXEファイルを作成することが出来ないということが分かりました。

MacからEXEファイルを作りたい場合は、Golangを使ってみるのもアリです。

この記事では、PyInstallerを使ったMacとWindowsで検証した結果を解説しています。

PyInstallerとは

PyInstallerとは

PyInstallerとは、さまざまなOSでスタンドアロンとして実行可能ファイルにパッケージ化します。

Windowsはもちろんんこと、MacやLinuxといったOSでも可能です。

ほかにもPyQtやDjangoなどのライブラリが完全サポートされています。

PyInstallerのインストール

PyInstallerをインストールするには、pipコマンドを利用して導入します。

下記がそのコマンドです。

$ pip install pyinstaller

問題がなければ、下記のような形でインストールが完了します。

Collecting pyinstaller
  Using cached pyinstaller-4.5.1-py3-none-macosx_10_13_universal2.whl (1.6 MB)
Requirement already satisfied: setuptools in /Users/ユーザ名/venv/lib/python3.9/site-packages (from pyinstaller) (57.4.0)
Requirement already satisfied: pyinstaller-hooks-contrib>=2020.6 in /Users/ユーザ名/venv/lib/python3.9/site-packages (from pyinstaller) (2021.3)
Requirement already satisfied: macholib>=1.8 in /Users/ユーザ名/venv/lib/python3.9/site-packages (from pyinstaller) (1.15.2)
Requirement already satisfied: altgraph in /Users/ユーザ名/venv/lib/python3.9/site-packages (from pyinstaller) (0.17.2)
Installing collected packages: pyinstaller
Successfully installed pyinstaller-4.5.1

エラーも出ずに、Successfullyがでれば問題ないです。

実行ファイルの作成

「テスト」と表示するだけのPythonスクリプトを作成します。

ファイル名は、exe_sample.pyとしています。

print('テスト')

このファイルで実行ファイルを作成するには、下記のpyinstallerコマンドを利用して作成します。

$ pyinstaller exe_sample.py

問題なく作成が完了すると下記のディレクトリやファイルが作成されます。

作成データ

  • __pycache__
  • build
  • dist
  • Pythonファイルのspec

distの中に実行ファイルが作成されるので、実行してみます。

$ ./dist/exe_sample/exe_sample 
テスト

問題なく実行できて、「テスト」が表示されました。

動くわけがないと思っていますが、出来たファイルをWindowsで実行してみます。

Windows実行で認識しない

Windows用に作成しないと動かないのは当たり前です(笑)

specファイルとは

specファイルとは、PyInstallerがspecファイルの内容を実行してアプリをビルドします。

そのため、specファイルには処理方法などの指示を書いたりするため、実行可能なPythonコードになります。

specファイルは、PyInstallerを実行すると自動で作成されますが、カスタマイズすると便利な場合があります。

メリット

  • dllやsoファイルを含めることができる
  • アプリにデータファイルをバンドルしたい場合
  • ランタイムオプションを追加したい場合
  • 共通モジュールをマージしたバンドルを作成する場合

spec ファイルを構成する4つのクラス

specファイルは、4つのクラスのインスタンスを作成します。

インスタンス

  • Analysis
  • PYZ
  • EXE
  • COLLECT

Analysisでは何をやっているかというと、スクリプト名を入力して、すべてのインポートとその他の依存関係を分析します。

そのため、Pythonのスクリプトファイル名やそのパス、インポートを検索するためのパスなどが、このAnalysisに含まれています。

PYZとはなんなのかというと、Cythonで書かれたファイルのことです。

EXEではAnalysisで分析されたスクリプトやPYZのアーカイブをもとに、構築されます。

このインスタンスを元に実行ファイルの作成を行います。

COLLECTでは何をやっているかというと、フォルダの作成などのアウトプット処理を行なっています。

EXEファイルへの変換

MacからEXEファイルを作成できるのかというとできません

EXEファイルってWindowsの実行ファイルなので、MacからPyInstallerを使ってEXEファイルを作成することはできない。

なので、EXEファイルを作るにはWindowsでpyinstallerを実行してあげる必要があります。

ちなみにGolangだとMacやLinuxからでもWindowsで実行できるEXEファイルを作成することが可能です

Windowsのコンソール画面で下記のコマンドを実行します。

$ pyinstaller exe_sample.py

問題なく作成できると、下記のフォルダが作成されます。

dist作成結果

作成したEXEファイルを実行

実行ファイルは、distの中にあります。

ここでは、dist/exe_sample/exe_sample.exeになります。

ダブルクリックしても一瞬だけコマンドプロンプトの画面が表示されるだけです。

理由としては、printしか表示していないからです。

なので、コマンドプロンプトから実行すると「テスト」が表示されます。

一つの実行ファイルにしたい

distディレクトリ(フォルダ)の中に実行するためのライブラリなど様々なファイルが作成されます。

しかし、自社のメンバーや他社の人に配る際にごちゃごちゃしていて、気持ち悪い。

しかも、実行ファイルだけ他の場所に移動するとライブラリやら無いなどで動かなくなる。

そういった場合は、オプションを指定することで一つの実行ファイルにまとめてくれます。

$ pyinstaller Pythonファイル --onefile

--onefileをつけることで、一つのファイルにまとめることができます。

おまけ

実行ファイルとpythonコマンドでカンタンに実行時間を計測してみました。

下記は、pythonコマンドで実行した結果です。

$ time python exe_sample.py
テスト

real    0m0.029s
user    0m0.019s
sys     0m0.007s

下記は、実行ファイル化したファイルを計測した結果です。

$ time ./dist/exe_sample
テスト

real    0m1.377s
user    0m0.116s
sys     0m0.076s

スピードに関しては正確では無いのですが、pythonで実行した方が速いです。

まとめ

PyInstallerを使うことで、WindowsはEXEファイルの作成ができMacやLinuxではPythonコマンドを使うことなく実行できるファイルが作成できます。

ファイル作成をするのに複雑な設定ファイルとかを書かないといけないのかと思ったのですが、「pyinstaller」のコマンドだけでカンタンに作成することもできます。

最後にスピードをカンタンに計測してみましたが、コンパイルしたのに逆に遅くなるって微妙な感じがします。

使い道はあると思いますが、私の場合はあまり無いなって感じました。

Udemyへ

今後の人生を豊かにする為にキャリアアップのステップとして、自分への投資をしてみませんか?

-Python
-,