【PyInstaller】Pythonのコードをアプリ化しよう

Python Python

私が良く使うのはVB.NETやC#.NETといったオープン系言語ですが、Pythonは短いコード量で目的を達成できるところが気に入っています。

一方、不便を感じていたのはコードを配布する際で、配布先の環境にPythonが入っているとは限らないため、コードを渡してハイ終わりとはならないことでした。Pythonが入っていてもこまかなライブラリの状況までイコールコンディションであることは少ないですよね。

PyInstallerとは

そんな時に便利なのが「PyInstaller」です。Pythonをはじめ実行に必要なライブラリなどをまとめて1つの実行ファイル(exe)に変換してくれる優れものです。

検証環境

いつもと同じくWindows10 Pro バージョン 2004、Python 3.6.1を利用しました。

PyInstallerをインストールする

pipを使ってインストールします。

pip install pyinstaller

書くことが無くて困るくらい簡単ですね(笑)いくらなんでもこれでは終われないので公式サイトをご案内しておきます。

https://www.pyinstaller.org/

実行ファイルを作る前に下準備(1)

サンプルに利用するファイルを作成しましょう。

import time

print('hogehoge')
time.sleep(5)

これをデスクトップに「hoge.py」として保存します。コマンドプロンプトに「python」と入力し、半角スペースを入れたらデスクトップのhoge.pyをドラッグアンドドロップしてEnterキーを押します。コンソールに「hogehoge」と表示され、5秒後にコンソールが終了したらOKです。

実行ファイルを作る前に下準備(2)

どこで作業しても良いのですが、exe作成時にフォルダが複数作成されるので纏めておいたほうがスッキリするのでお勧めです。私は下記コマンドをホームディレクトリ直下で実行しました。

mkdir PyInstaller
cd PyInstaller

実行ファイル作成

pyinstaller C:\uses\sandambara\desktop\hoge.py --onefile

「pyinstaller+半角スペース」の後ろへhoge.pyをドラッグアンドドロップ+EnterキーでOKです。exe作成が開始されズラズラとコマンドが流れる様子にテンションが上がります(嬉)

コマンド末尾のオプション「–onefile」ですが、これはexe化するにあたり必要なファイル群を全てまとめてexeを作成するものです。私は1個にまとまっている方が便利だと思うので毎回つけるオプションです。

もう一つ「–noconsole」というオプションがあり、これを付与するとexe実行時にコンソールが表示されません。たとえば以前こちらの記事で自作チャットツールをご紹介しました。

このツールのようにGUIが表示されるアプリケーションであればコンソールを表示させる必要はありませんので–noconsoleで良いと思います。逆にインタラクティブ形式で動作するようなアプリケーションの場合は–noconsoleを付けないように注意しましょう。試しに「hoge.py」を–noconsoleでexeにしたものをダブルクリックしてみましょう。見事に何も起こりません・・・

実行ファイルができた!

10541 INFO: Building EXE from EXE-00.toc completed successfully.

実行ファイルが作成されました。hoge.pyを保存したデスクトップに「__pycache__」というフォルダが作成されているのが目に付きますが、不要ですので丸ごと削除しても問題ありません。

作業ディレクトリの中を確認するとディレクトリ「build」「dist」とファイル「hoge.spec」が作成されています。このうち「dist」の中に「hoge.exe」が作成されていることを確認しましょう。「–onefile」をつけてexe化した場合、作業ディレクトリ内にあるexe以外のものは全て必要ありませんので削除しても大丈夫です。「–onefile」を付けなかった場合は「dist」のフォルダをまるっと配布します。

では、作成されたexeをダブルクリックしてみましょう。

「hogehoge」と表示され、5秒後に終了すれば大成功です!

デメリットというほどのこともないのですが、そこそこのコード量のファイルをexe化すると数10~数100MBのexeが出来上がる場合があります。昨今のPCのスペックではそこが問題になることは無いと思いますが、メールでexeを配布したい場合はファイルサイズに注意しておきましょう。LAN内であれば共有フォルダで渡してしまうのが簡単で良いですね。

これで色々なツールの配布が容易になります。exeなので勝手にコードを編集できず、亜種が生まれないのも管理者としては嬉しいところです(笑)

Pythonはちょっとしたツール作りにとても便利だと思います。是非皆さんも挑戦してみてください!

コメント