この記事では、Pythonファイルを実行ファイルに変換する方法を解説します。
実行ファイル化(exe化)することでPythonがインストールされていない環境でもPythonプログラムを実行することができるようになります。
それにより作成したプログラムを配布したりすることができます。
それでは、Pythonファイルをexe
化する方法を見ていきましょう!
実行ファイルとは?
実行ファイルとは、exe
ファイル(エグゼファイル)やexec
ファイルなどの総称でダブルクリックするだけで処理を実行できるファイルのことを言います。
実行ファイルは、必要な環境(ここではPyhton)がインストールされていない場合でも処理を実行することができます。
それにより、幅広く配布が可能となります。
Linkexeファイル (エグゼファイル)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
実行ファイル化(exe化)
それでは、Pythonファイルをexe
化する方法を見ていきましょう!
ここでは、人気の高いpyinstaller
を使用します。
pyinstallerのインストール
pip
コマンドを使ってインストールします。→ pipのインストール
pip install pyinstaller
pyinstallerの使い方
pyinstaller
コマンドを使って以下のようにexe
化します。
pyinstaller スクリプト名
PyInstaller Manual — PyInstaller 4.8 documentation
exe化してみる
試しに適当なPythonファイルを実行ファイル化してみましょう!
今回は、以下のtest.py
を使います。
test.py
print('Hello world')
そしたら、ターミナルなどのコマンドラインから以下のコマンドを実行します。
pyinstaller test.py
実行するといろいろ表示され、
$ pyinstaller test.py
239 INFO: PyInstaller: 4.5.1
239 INFO: Python: 3.9.0
268 INFO: Platform: macOS-10.15.7-x86_64-i386-64bit
277 INFO: wrote /Users/user/Desktop/Python/test.spec
411 INFO: UPX is not available.
413 INFO: Extending PYTHONPATH with paths
['/Users/user/Desktop/Python', '/Users/user/Desktop/Python']
713 INFO: checking Analysis
714 INFO: Building Analysis because Analysis-00.toc is non existent
・
・
・
略
test.py
と同じディレクトリに複数のディレクトリやファイルが作成されます。
実行ファイルは、dist
ディレクトリに格納されています。
見つけたらダブルクリックで実行してみましょう!
すると、以下のようにHello world
が出力されました。
外部ファイルを使いたい
exe
ファイルから外部のファイルを使えるようにするには、使用するファイルをspec
ファイルに追記する必要があります。
例えば、先ほど実行ファイル化したtest.py
が、以下のようにテキストファイルを使用するコードだったとします。
test.py
with open('text.txt', 'r') as f:
print(f.read())
テキストファイルの内容はなんでも良い。
text.txt
Hello
World
このままtest.py
をexe
化して実行しても以下のようにエラーが発生する。
上記ではファイルが見つからないってエラーが出ていますね。それではexe
化した際に生成されたspec
ファイルに使用するファイルを追加してみましょう。
spec
ファイルのAnalysis
のdatas
に以下のような形式で追加します。
('追加するファイルやディレクトリのパス', '追加する場所(ディレクトリ)')
同ディレクトリ内にあるtext.txt
をアプリのトップレベルのディレクトリに追加するには以下のように記述します。
spec
ファイルを変更したら次にtest.py
も書き換える必要があります。
追加されたファイルは_MEIPATH
という場所に格納されるので以下のような関数を通してファイルを検索します。
import sys
import os
def resource_path(filename):
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, filename)
return os.path.join(os.path.abspath("."), filename)
with open(resource_path('text.txt'), 'r') as f:
print(f.read())
spec
ファイルとtest.py
を書き換えたら変更をビルドします。
コマンドラインで以下のコマンドを実行してください。spec
ファイルを使用している点に注意。
pyinstaller test.spec
生成されたexe
ファイルを実行してみてください。
外部ファイルを使用することができました。
オプション
PyInstaller
には様々オプションが用意されています。ここでは中でもよく使われるオプションを見ていきましょう!
1つのファイルにまとめる
--onefile
オプションを付けることで1つのファイルにまとめることができます。
pyinstaller test.py --onefile
以下のように1つのファイルにまとめられてスッキリします。
外部ファイルを使用している場合でも1つのファイルにまとめることでexe
ファイルだけで実行可能となる。
コンソールを表示しない
--noconsole
オプションを付けることで実行ファイルを処理しているときにコンソールを表示できなくします。
pyinstaller test.py --noconsole
GUIアプリケーションなどを実行ファイル化する際に指定します。
実行ファイル名の指定
--name
オプションを付けて名前を指定することで実行ファイル名を指定できます。
pyinstaller test.py --name mytest --onefile
mytest
という名前で実行ファイルが作成されました。
他にも様々オプションが用意されています。詳しくは公式サイトを参照してください。
LinkOptions - Using PyInstaller — PyInstaller 4.5.1 documentation
エラーが発生した時の対処法
pyinstaller
は、環境によって様々なエラーが発生します。
エラーが発生した時は、--noconsole
オプションを外して--debug all
オプションを付けて実行してみましょう!
pyinstaller スクリプト名 --debug all
すると、実行ログが可視化されるのでデバッグしやすくなります。
また、pyenv
を使っている場合にもエラーが発生することがあります。
そんな時は以下のように、オプションを付けながらpyenv
で使用するPython
を再インストールしてみましょう。
PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.9.0
まとめ
この記事では、Pythonファイルをexe
化する方法を解説しました。
exe
化することで環境に関係なく実行できるようにしました。
成果物を配布するのにとても便利です。
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ