PyInstallerとは、「Python」のライブラリのひとつで、「Python」で書かれたコードをスタンドアロンの実行可能ファイル(exe形式でWindows、app形式でmacOS、ELF形式でLinuxなど)に変換するツールです。
本記事では、PyInstallerの概要や使い方、EXE化する方法などについて解説します。
PyInstallerとは「Python」のライブラリのひとつで、主に「Python」で記述したプログラムをパッケージ化して配布するために用いられます。
本記事では、PyInstallerの概要や使い方、プログラムをEXE化する方法などを詳しく解説します。
目次
PyInstallerは「Python」のライブラリのひとつで、「Python」で記述したプログラムをパッケージ化してひとつのファイルにまとめられるライブラリです。
「Python」で作ったファイル(.py)を実行可能ファイル(exe形式でWindows、app形式でmacOS、ELF形式でLinuxなど)に変換可能なため、実行可能ファイルがあると配布先のパソコンに「Python」がインストールされていなくても、実行できるようになります。
PyInstallerは、WindowsやmacOS、LinuxなどのOSに対応しているため、OSごとの実行可能ファイルが作成できます。
そのため、アプリ開発などさまざまな分野で応用することが可能です。
PyInstallerをインストールするには、最初にコマンドプロンプトを起動しpipコマンドでインストールします。
インストールする時のコマンドは、以下の通りです。
pip install pyinstaller
以上のコマンドを入力して下図のように「Collecting pyinstaller…」といったメッセージが表示されれば、正常にインストールは完了です。
ここからはPyInstallerで「Python」プログラムを実行可能ファイル化する方法を解説します。
PyInstallerで「Python」プログラムを実行可能ファイル化する方法は、主に以下の3つです。
上記3つの手順は、WindowsとmacOSのどちらでも対応可能です。ここでは、上記3つの手順をそれぞれ解説します。
まず実行可能ファイル化する「Python」ファイルを作成します。「Python」ファイルは、以下のコードを記述することで作成できます。
import tkinter class DesktopApp(tkinter.Frame): def __init__(self, window=None): super().__init__(window, width=380, height=290,borderwidth=1, relief="groove") self.window = window self.pack() self.pack_propagate(0) self.create_widgets() # ウィジェット作成 def create_widgets(self): # 実行ボタン submitBtn = tkinter.Button(self) submitBtn["text"] = "実行する" submitBtn.pack(side="bottom") # Tkinterオブジェクト window = tkinter.Tk() # アプリのタイトル window.title("テストアプリ") # 画面の大きさ window.geometry("400x300") # アプリケーションオブジェクト App = DesktopApp(window=window) App.mainloop()
実行ファイルを作成する場合は、上記のコードを記述し、新規で名前を付けて「Python」ファイルとして保存してください。今回は例として「test.py」として保存し、引き続き解説します。
続いてWindowsではコマンドプロンプト、macOSではターミナルを開き、Pyinstallerで実行可能ファイルを作成するために、事前に作成した上記の「test.py」ファイルがあるディレクトリに移動します。
Desktop/Pyinstaller/test.pyにファイルがある場合は、主に以下のようなコードを実行します。
Mac:cd Desktop/Pyinstaller Windows:cd Desktop¥Pyinstaller
最後に、PyInstallerで実行ファイルを作成します。
PyInstallerで実行ファイルを作成する方法は、「Python」ファイルのあるディレクトリにコマンドプロンプト上で移動した後、以下のコマンドを実行します。
pyinstaller test.py --onefile
上記コマンドを実行後、保存したディレクトリを確認すると、新規フォルダが作成されています。
「Python」の実行ファイルは、新規に生成されたdistフォルダの中に作成されています。
作成された実行ファイルをクリックして、下図のような画面が表示されれば、正常に動作した証拠です。
PyInstallerのオプションコマンドには、主に以下の種類があります。
PyInstallerでEXEファイルを作成する場合は、コマンドを使い、動作を調整しましょう。
ここからは、上記6つのオプションコマンドを、それぞれ解説します。
onefileは、出力ファイルをひとつのファイルとしてまとめるためのオプションコマンドです。
主に以下の記述で指定します。
--onefile
または
-F
実行ファイルを作成する時などにonefileを付け加える場合が多く、onefileを指定することによって、スクリプト実行に必要なファイルをひとつの実行ファイルにまとめてくれます。
そのため、onefileという名前になっています。
これからPyInstallerで実行ファイルを作成する場合に、軽量化もさせたい場合はonefileを付け加えて作成することがおすすめです。
noconsoleは、実行ファイルの実行時にコンソール起動を無効化させるオプションコマンドです。
主に以下の記述で指定します。
--noconsole
または
-w , --windowed
ツールを配布する時に余計な画面を配布させたくない場合は、noconsoleを指定することで非表示にすることが可能です。
しかし、noconsoleを指定することでコンソール画面に表示されるエラーの内容も確認できなくなってしまうため、noconsoleコマンドの使用には注意が必要です。
とくにデバッグ中などはエラーをスムーズに解決できなくなってしまうことから、指定しないことをおすすめします。
cleanとは、PyInstallerのキャッシュのほか、当該処理の前に作成されたディレクトリを削除してくれるオプションコマンドです。
主に以下の記述で指定します。
--clean
前回作成したPyInstallerキャッシュやディレクトリが不要にもかかわらず、削除せず残ったままでは、ハードディスクの容量が増えて圧迫されてしまいます。
そのためcleanを指定して、不要なディレクトリなどを削除し、軽量化しましょう。
onedirとは、出力ファイルをひとつのディレクトリとしてまとめるためのオプションコマンドです。
主に以下の記述で指定します。
--onedir
または
-D
ただしonedirオプションがアプリケーションを軽量化するわけではありません。
むしろ、–onefileオプションを使用した場合と比べると、出力されるディレクトリ内にはより多くのファイルが含まれます。
しかし、各ファイルが個別にアクセス可能なため、デバッグやトラブルシューティングが容易になるメリットがあります。
nameとは、実行可能ファイルの名前を指定するオプションコマンドです。
主に以下の記述で指定します。
--name
または
-n
たとえば、–name MyAppとすると、出力されるEXEファイルの名前は”MyApp.exe”となります。
作成した実行可能ファイルが複数個ある場合や、特定の名前を付けたい場合に、nameオプションを使用しましょう。
iconとは、作成したEXEファイルにアイコンを設定するオプションコマンドです。
主に以下の記述で指定します。
--icon
または
-i
iconオプションコマンドは、作成したアプリへアイコンを設定する時に指定します。
アプリケーションの見た目のカスタマイズや、他のアプリケーションとの差別化におすすめです。
PyInstallerで実行可能ファイルを使用する時に「Python」で多くのモジュールをインストールしていると、pipでインストールしているモジュールをすべて組み込んでしまい、容量の大きいファイルになってしまいます。
そのためPyInstallerで作成したEXEファイルは、容量が無駄にならないように軽量化させる必要があります。
PyInstallerで作成した実行可能ファイルを軽量化する方法は、主に以下の2つです。
ここでは、上記2つの実行可能ファイルを軽量化させる方法を、それぞれ解説します。
ここではWindows環境での仮想環境の構築法を解説します。
仮想環境を構築するには最初に仮想環境用のフォルダを作成しましょう。
そして作成したフォルダ内に仮想環境を作成するために、以下のコマンドに従い実行します。
「Python」 -m venv 仮想環境名
コマンドは、「Python」のコマンドに「-m」のオプションとモジュール名の「venv」と仮想環境名がつながっているものです。
以上のコマンドに従って実行し、仮想環境が作成できたら以下のコマンドを記述し、実際に仮想環境を起動します。
C:\Users\PCのユーザーネーム\仮想環境名\Scripts\activate
正常に仮想環境が表示されると、上図のように行頭に仮想環境名がカッコ付きで表示されます。
以上が仮想環境を構築する方法です。
作成された仮想環境は、フォルダを削除すれば破棄することが可能です。
無効化する場合は、以下のコマンドを実行します。
deactivate
無効化の処理が正常におこなわれると、行頭の表示が消えます。
続いて、「Python」スクリプトが仮想環境上で動作するモジュールをインポートします。
PyInstallerで作成された「Python」の実行可能ファイルを軽量化させるためには、不要なモジュールをインストールせずに、必要最低限のモジュールのみをインポートさせる必要があります。
実行可能ファイルは不要なモジュールがなくなることによって、動作が快適になり使いやすくなるので、不要なモジュールはインストールしないようにしましょう。
必要最低限のモジュールのみをインポートする時は、以下のようなコマンドになります。
pip install pyinstaller
これからPyInstallerで作成された実行可能ファイルを軽量化させて、快適に使おうと考えている場合は、上記の方法を参考にしてください。
PyInstallerでエラーが発生した場合の対処法は、状況に応じて変わってきます。PyInstallerで発生するエラーは、主に以下の4つです。
ここでは、上記4つの場合の対処法を、それぞれ解説します。
EXEファイルが実行できない場合、EXEファイルをうまく組み込めないライブラリの可能性があります。pyinstallerでうまくEXEファイルに組み込めないライブラリはpywin32などいくつか存在します。
そのため、特定のライブラリでEXEファイルが実行できない場合は、一時的にそのライブラリをアンインストールしてみるか、あるいはPyInstallerのオプションを変更してみる(たとえばonefileを外す)などが効果的です。
ただしこれらの手段は状況により異なり、必ずしもEXEファイルが実行できない問題の解決策になるわけではありません。
pywin32をアンインストールする時は、以下のコードを記述します。
pip uninstall pywin32
そして、インストールする時は、以下のコードを記述します。
pip install pywin32==228
以上の操作および解説はEXEファイルが実行できない問題を解決するためのひとつの例です。状況によって適切な対応は異なりますので、注意してください。
ModuleNotFoundErrorが出た場合は、エラーになっているモジュールがEXEファイルに同封されていない状態です。
主に、以下のようなエラーが表示されます。
ModuleNotFoundError: No module named 'pandas_profiling.describe'
モジュールをしっかりとEXEファイルに同封するために、specファイル内の「hiddenimports」に、モジュールがインポートできていないことを明示するため、以下のコードを記述します。
hiddenimports=['pandas_profiling.describe']
上記のコードを記述することによって、ModuleNotFoundErrorは解消されます。
このコードを記述してもエラーが解消されない場合は、hiddenimportsの項目にカンマ区切りでエラーになっているモジュールを追記しましょう。
FileNotFoundErrorが出た場合は、エラーに記載されているEXEファイルがうまく同封されていない状態です。
主に、以下のようなエラーが表示されます。
FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\username\AppData\Local\Temp\_MEI103442\wordcloud\ipaexg.ttf'
この場合、specファイル内の「datas」に、ファイルのインポートができていないことを明示的に記述するコードことで解消されます。
datas = [('C:\\Users\username\testvenv\lib\sitepackages\wordcloud\ipaexg.ttf','\wordcloud\')]
上記のコードを記述して再実行すると、新しくEXEファイルが作成され、エラーが解消されます。
RecursionErrorは、関数内での再帰のしすぎにより「Python」のデフォルトの再帰回数上限を超えると発生します。
主に、以下のような表示がされます。
RecursionError : maximum recursion depth exceeded
このエラーは、スクリプト内で再帰関数を使用していない場合でも発生することがあります。
エラーが発生した場合、再帰回数の上限を増やすことで一時的に問題を回避できますが、根本的な解決策としては、再帰を使用するコードを見直すことが推奨されます。
RecursionErrorを解消するためにスクリプト内の再帰回数の上限をPythonのデフォルトの再帰回数上限である1,000回よりあげるコードは、以下です。
import sys sys.setrecursionlimit(10000)
RecursionErrorが発生した場合、上記のコードを記述すれば解決します。
「Python」のフレームワークであるPyInstallerを使用することで、「Python」で記述したプログラムを実行可能ファイル化させることが可能です。
PyInstallerはWindowsやmacOS、Linuxなどにも対応しているほか、パソコンに「Python」がインストールされていなくても実行できます。
実行するための準備や手間が少なく誰でも実行できるので、「Python」を扱う方は、ぜひ今回の記事を参考にPyInstallerを使用してみてください。
2024.06.17
子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介
#プログラミングスクール
2022.01.06
【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説
#プログラミングスクール
2024.01.26
【未経験でも転職可】30代におすすめプログラミングスクール8選!
#プログラミングスクール
2024.01.26
初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説
#JAVA
2024.01.26
忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説
#プログラミングスクール
2022.01.06
【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介
#プログラミングスクール
2024.01.26
【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説
#プログラミングスクール
2024.01.26
【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説
#プログラミングスクール