[解決!Python]PyInstallerでPythonスクリプトを実行可能ファイル化するには:解決!Python
Pythonがインストールされていない環境でもスクリプトを実行できると便利なことがある。PyInstallerを使ってこれを実現する方法を紹介する。
PyInstaller
Pythonで書かれたスクリプトを実行可能ファイルに変換すると、Pythonがインストールされていない環境でそのプログラムを簡単に実行できる。Pythonスクリプトを実行可能ファイル化する方法にはいろいろなものがあるが、ここではPyInstallerを紹介しよう。
PyInstallerの特徴を以下に挙げる。
- Python 3.7以降に対応
- Pythonスクリプトとそれが依存するパッケージを1つのパッケージ(単一の実行ファイルまたは配布ファイルを含んだディレクトリ)に作成する
- Windows、macOS、Linuxに対応(他のUNIX系統のOSでの動作は保証されていない)
- あるOSプラットフォームで作成されたPyInstallerパッケージは他のOS上では動作しない
なお、実行可能ファイルとしてパッケージ化する際にはPythonの処理系もまとめられるので、例えば、64ビット版のPythonで実行可能ファイル化したものは32ビット版のWindows上では動作しないなどの制約もある点には注意されたい(macOSでもデフォルトでは、Pythonがどのような環境で動作しているかに応じて、単一のアーキテクチャー向けのバイナリが作成される)。
以下では、PyInstallerによるPythonスクリプトの実行可能ファイル化の手順を見ていこう。
PyInstallerによるPythonスクリプトの実行可能ファイル化
PyInstallerを使うには、それをインストールする必要がある。これにはpipコマンドを使えばよい。ここではvenvモジュールを使って仮想環境を構築し、そこにPyInstallerをインストールしている。
> pip install pyinstaller
これにより仮想環境でpyinstallerコマンドが使えるようになる(仮想環境ではなく、トップレベルでPyInstallerをインストールしたときにはPATHの設定が必要になるかもしれないが、本稿では取り上げない)。
またスクリプトで使用するパッケージとしてrequestsをインストールしたものとする(requestsパッケージは単にスクリプトが必要とするものをPyInstallerが追跡しパッケージにまとめてくれることを確認するためだけに使用する)。
> pip install requests
ここではPythonスクリプトを次のような構成とした。
コードについては詳しい説明は省略する。greet.pyファイルで定義された関数をmain.pyファイルで使用したり、requestsモジュールの__version__属性の値を表示したりするだけだ。
- mylibディレクトリ:main.pyファイルで使用するgreet.pyファイルを格納
- main.pyファイル:Pythonスクリプトの本体。greet.pyファイルで定義されている関数とrequests.__version__属性を使用
- venv:仮想環境
以上の構成のPythonスクリプトを実行可能ファイル化するには、メインとなるPythonスクリプトがあるディレクトリに移動して、pyinstallerコマンドを実行する。
> pyinstaller main.py
これにより、Pythonスクリプトの解析が行われた後に、パッケージとしてまとめられた内容がdistディレクトリ以下に作成される(distディレクトリの直下にPythonスクリプトから拡張子を除いたものでディレクトリが作成され、その下にパッケージの内容がまとめられる)。
上の例はWindows環境のものなので、main.exeファイルが作成されている。dist\mainディレクトリに作成されたmain.exeファイルを実行してみよう。
このように問題なくプログラムが実行された。
注意したいのは、デフォルトでは実行可能ファイルとして他の環境にPythonスクリプトを配布するときには、distディレクトリ以下にあるPythonスクリプトの名前が付いたディレクトリごと配布する必要がある点だ(上の例なら、mainディレクトリの内容をまるごと配布する)。
オプション
PyInstallerには多くのオプションが用意されている。例えば、先ほどの例では実行可能ファイルと関連ファイルが1つのディレクトリにまとめられるようになっていたが、単一の実行ファイルに全てをまとめることもできる。これには-F/--onefileオプションを指定する。これにより、distディレクトリ以下に実行可能ファイルとしてPythonスクリプトの内容が単一ファイルとして作成される。
このようなオプションを幾つか紹介する。
- -D/--onedir:実行可能ファイルを含むパッケージの内容を1つのディレクトリにまとめる(デフォルトの動作)
- -F/--onefile:全てをまとめた単一の実行ファイルを作成する
- --clean:ビルドを実行して実行可能ファイルを作成する前に、PyInstallerのキャッシュや一時ファイルを削除する(buildディレクトリ以下の内容を一度削除してから、作業に取り掛かる)
- -n NAME/--name NAME:作成する実行可能ファイルのファイル名を指定する。上の例ではmain.pyからmain.exeファイル(他のOSなら「main」となるだろう)が作成されたが、「--name sample」オプションを指定すると、sample.exeファイルが作成されるようになる
- --distpath DIR:パッケージとしてまとめられたアプリを配置するディレクトリを指定する。デフォルトは「dist」ディレクトリ
例えば、--name sampleオプション、--onefileオプション、-distpath MYDISTオプションを指定して、pyinstallerコマンドを実行すると次のように、MYDISTディレクトリに単一のファイルsample.exeが作成される。
Copyright© Digital Advantage Corp. All Rights Reserved.