作成したプログラムをPythonをインストールしていない環境でも実行するためには、実行ファイル(.exe)にする必要があります。ここではexeファイルを作成する時に活躍するPyinstallerについて説明します。
こんにちは。wat(@watlablog)です。
Pythonでプログラムを作成したら、誰かに配布したくなる時もありますね。
ここでは実行ファイルを作成するためのPyinstallerのインストールから使い方までを説明します。
プログラムを配布しよう!
実行ファイル(.exe)とは?
これまでこのブログでは、Pythonのインストールや環境構築、プログラムの実行方法について説明して来ました。
本日は実行ファイルの作り方についてまとめておこうと思います。
実行ファイルとは、Windowsの場合ダブルクリックでプログラムが実行されるファイルのことを指します。
Pythonで作成したプログラムも、PyCharmやコマンドプロンプトからPythonを呼び出して実行する方法とは異なり、Pythonの環境が無いその他Windows環境下でもプログラムが動作するのが実行ファイルです。
なぜ実行ファイルにする?
Pythonをインストール済で、自身の環境のみプログラムを使った作業をするのであれば実行ファイルは必要ありません。
プログラムは得てして第三者に配布することがあります。第三者は自分の知っている人かも知れませんし、フリーソフトとして共有する場合は知らない人にだって配布することが良くあります。
そして、Vectorのシェアレジに代表されるように、ソフトを有料で配布することも可能です。
有益なソフトほど配布に対するニーズがありますが、その際にソースコード(プログラムを記述した内容が見れるファイル)をそのまま配布することはほぼありません。
ソースコードをそのまま配布し、使い方マニュアルに、
「Pythonをインストールしてください。バージョンは〇〇です。pipでNumPyをダウンロードして下さい。〇〇の手順で実行してく…」
と記載しても、よほどの場合以外は嫌がられて見向きもされません。
またソースコードの中身が見られてしまうと容易に複製が出来てしまうので、知的財産等、秘匿の必要性がある場合もそのままの配布はされません。
そのような場合にプログラマはプログラムを実行ファイルに変換します。
Pythonのプログラムを実行ファイルにしよう!
Pyinstallerのインストール
インストールにはpipを使います。pipについての紹介は以下の記事から。
Pythonのパッケージ管理ツール pipの使い方とコマンド集
pipを使うために、コマンドプロンプトで以下の文を入力してエンターボタンを押します。
1 |
python -m pip install pyinstaller |
インストールが始まると、ちょっと長めの実行結果が出力されます。
追加で何かすることは無いのでそのまま待ちます。
ソースコードの用意
今回実行ファイルにするのは、前回の記事で作成したHello worldプログラムを使います。
Hello worldプログラムは「print("Hello world!")」で書ける世界一有名なプログラムの一つですが、詳細は前回の記事をご覧ください。
基本!PythonのHelloWorldをコマンドプロンプトで実行する方法
但し、このままのプログラムコードだと.exeファイル形式から実行すると一瞬で終わってコンソール(実行画面)が閉じてしまい、プログラム実行結果が確認できないので、下記のようにスクリプトを追加します。
「a = input()」は、キーボードからの入力待ち状態にさせたいために書いています。
1 2 |
print("Hello world!") a = input() |
ファイルは任意の場所に置きます。
実行ファイルに変換するコマンド
前回Hello worldプログラムをコマンドプロンプトから実行した時のように、まずはコマンドプロンプトを開き、実行ファイルにしたい.pyファイルが入っている場所をカレントディレクトリにします。
その後、Pyinstallerで実行ファイルを作成する時のコマンドとして以下を入力し、エンターを押します。
1 |
pyinstaller HW.py --onefile |
ここで「--onefile」とは、.exe化の時にファイルを一つにまとめるコマンドライン引数です。※HW.pyは実行ファイルにしたいPythonファイルです。
他にも、コンソール画面を表示させない「--noconsole」等もあります。
以下の画像が実行例です。
変換が終了するといくつかフォルダができますが、distフォルダの中に配布用の.exeファイルが作成されています。
.exeファイルをダブルクリックで実行すると、新たに実行画面が立ち上がり、Hello worldプログラムが動作します。キーボード入力待ち状態になっているので、何か入力(もしくは単にエンター)すると画面は消えて、動作終了します。
まとめ
本記事では、プログラムを配布する場合の目的や実行ファイル(.exe)について説明しました。
また、具体的な方法としてPyinstallerを用いること、Pyinstallerのインストール方法と使い方について説明しました。
備忘録と注意
ネットでPyinstallerについて調べていると、Python3.7には対応していないので、Python3.6にバージョンダウンして使っている人が散見されましたが、Pyinstaller3.4(2019年4月現在の最新)はPython3.7対応したとのことです。
以下、公式情報。
PyInstaller 3.4 has been released and it supports Python 3.7!
Pyinstaller公式:https://www.reddit.com/
また、今回はPython3.7とPyinstaller3.4と、ともに2019年4月現在のほぼ最新バージョン同士で動作させています。今回は最もシンプルなプログラムの.exe化をしましたが、もしパッケージ等未対応がある場合は実行中にエラーが出る可能性が高いです。本ブログでは、ブログで取り上げた中で気づくことがあれば本ページに追記しますが、全てのパターンを検証しているわけではないことにご注意下さい。
意外にも簡単に実行ファイルが出来たぞ!
これで誰かに配布したくなった時の方法はばっちりかな?
X(Twitter)でも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!
分かりやすいブログをありがとうございます。
Jupyter NotebookでHW.pyファイルを作成しました。
files = glob.glob(“*.py”)
を使って、HW.pwファイルがあることを確認して、以下のコマンドを実行したのですがエラーメッセージが返ってきてしまいましたが原因が分かりません。
pyinstaller HW.py –onefile
—エラーメッセージ—
File “”, line 1
pyinstaller HW.py –onefile
^
SyntaxError: invalid syntax
ご訪問ありがとうございます。
SyntaxError(構文エラー)が出ているという事は、「pyinstaller HW.py –onefile」をJupyter Notebook上で実行しましたでしょうか?
本コマンドはWindowsであればコマンドプロンプト、MacやLinuxであればターミナルから実行すると動作します。
.pyファイルがある場所までcdで移動するか、絶対パスを指定して実行してみてください。
よろしくお願いします!
出来ました。コマンドプロンプトを使いました。ありがとうございます!
私の記載間違いですが、「pyinstaller HW.py –-onefile」でした。”-“でなく”–“ですね。
ご連絡ありがとうございます。
解決したようで安心しました!
今後ともよろしくお願いします。