ぬこ将軍です🐈
Pythonで作成したプログラムを他の人にも使ってもらいたい時、その人もPythonの環境を構築していればすぐに渡すことができますが、まだPythonが会社内に浸透しきっていない場合は少し手間がかかります。
プログラムをexeファイル化することでPython環境を構築していない人にも使ってもらうことができますが、意外と困ったことが起きるのです。。。
今回は「Pythonで作成したプログラムをexe化する際に容量を軽量化させる方法」について、自分の経験を共有しようと思います!
- Pythonを始めたばかりで、プログラムを作ったはいいけど他の人への共有方法が分からない!
- Pythonで作成したプログラムをexe化したけど、なぜかファイル容量が重くて困っている!
そんな方々の参考になりましたら幸いです。
Pythonプログラムexeファイル化の際に軽量化させる方法
まず、普通に自分のPython環境でプログラムをexeファイル化した結果がコチラ。
何も考えずにexe化すると、出来上がったファイル容量が意外と重く困ってしまいました。。。
その後、Pythonで作成したプログラムをexe化する際に容量をどう軽くしたか?私が実践したことを先に結論として書きます。
- Pythonの仮想環境を構築する。
- 仮想環境内で、pyinstallerをインストールする。
- 仮想環境内で、プログラムを動かすのに必要なライブラリ(numpyとか)のみをインストールする。
- 目的のpyファイルをpyinstallerでexe化する。
以上の4ステップについて、具体的に書いていきます。
Pythonの仮想環境を構築する
なぜPythonの仮想環境を構築するのか?
まず「仮想環境とは何か?」についてですが、ざっくり言うと「今の環境とは別にPythonを動かす環境」です。
「既にPC内に環境構築したのに、別の環境をまた作る必要があるの?」という疑問を持つ方も居ると思いますが、必要です!
なぜ必要かというと、主に以下の理由のためです。
- 既にインストールしたPythonライブラリ同士の干渉を防ぐため。
- exeファイル化したいプログラムを動かすのに必要最小限のライブラリだけ取り込みたいから。
特に2つ目の理由ですが、プログラムをexeファイル化する際にそのままの環境でやってしまうと、これまでインストールしてきたライブラリ全てがexeファイル内に含まれてしまいます。
最初の方で見せたファイル容量が300MBだったのは2つ目の理由が関係しています。
なので、容量を軽くしたいなら仮想環境を構築してその中でexe化をすることになります。
Pythonの仮想環境構築方法
それでは仮想環境を構築していきます。まずは「コマンドプロンプト」、あるいはPythonをAnacondaでインストールした人は「Anaconda Prompt」を起動します。
Anaconda Promptでも仮想環境構築ができます。下記サイト様をご参照ください。
Pythonの仮想環境利用のすすめ(Anaconda環境) | 超初心者向けPython入門講座
今回は「仮想環境置き場」というフォルダ内に構築しようと思うので、コマンドプロンプトを起動したらまずは「cd(チェンジディレクトリ)」で構築したいフォルダに移動します。
その後に「python -m venv ○○○」と入力します。○○○には仮想環境の名前を任意で入力します。
成功すれば、仮想環境が構築できます。
作成したとはいえ、これだけでは仮想環境上で作業はできません。作成した仮想環境フォルダの中にあるScriptフォルダ内の「activate.bat」というバッチファイルを起動することで、仮想環境に現在地が変わります。
コマンドは「○○○\Scripts\activate」です(○○○には仮想環境の名前が入ります)。
仮想環境内で、pyinstallerをインストールする
仮想環境に入ったので、次は必要なライブラリだけをインストールする作業にいきます。まずexeファイル化するために絶対必要なライブラリ「pyinstaller」です。これがないとexe化は出来ません。
コマンドプロンプト上で「pip install pyinstaller」と入力して実行すると、インストールが開始されます。
ライブラリのインストールですが、パッケージ管理システムは全てpipに統一した方が良さそうです。そもそもpipとcondaを混ぜるとエラーが起こりやすいですし、もし必要なライブラリにpandasがある場合、condaからpandasをインストールすると容量がなぜか重くなると、Pythonに詳しい友人が言っていました。
仮想環境内で、プログラムを動かすのに必要なライブラリのみをインストールする
次はpyinstaller以外で必要なライブラリのインストールです。今回は入力した画像から図形を探し、その図形輪郭を線で囲うというプログラムをexeファイル化しようと思います。
このプログラムに必要なライブラリはOpenCVです。なので、コマンドプロンプト上で「pip install opencv-python」と入力して実行します。
他の必要なライブラリについても、「pip install ○○○」でOKです(○○○にはライブラリ名が入ります)。
OpenCVのように、インストール時のコマンドがライブラリ名だけではない場合がありますので、Googleなどで「ライブラリ名 インストール pip」のような感じで検索して確認してみると安心です。
目的のpyファイルをpyinstallerでexe化する
必要なライブラリをインストールできたら、いよいよexe化です!例のプログラムは「図形の輪郭検出.py」という名前で「仮想環境置き場」フォルダの直下に入れました。
コマンド上で「pyinstaller -F -w ○○○.py」と入力します(○○○にはpyファイル名が入ります)。
入力内容に-Fと-wという文字がありますが、これはそれぞれ以下のような役割です。
- -F:プログラムを1つにまとめるもので、exeファイルのみでプログラム起動するには必須。
- -w:コマンドプロンプトを表示させないためのもので、コマンドプロンプトの表示が不要な場合はつける。
成功すると仮想環境を構築しているフォルダに新しく「dist」というフォルダが生成され、その中にexe化されたプログラムファイルがあります。
このような感じで、PythonプログラムをPython環境が無い人でも利用できるようになります。
仮想環境での作業が終わったら、忘れずに仮想環境から出ましょう。コマンドプロンプト上で「deactivate」と入力するだけでOKです。
ここで、仮想環境下でexeファイル化したものと普通の環境でexeファイル化したものを比較してみましょう。
仮想環境で実行するだけでこんなに容量を軽量化できます!
まとめ
最後に、Pythonで作成したプログラムをexe化する際のポイントをまとめます。
- Pythonの仮想環境を構築する。
- 仮想環境内で、pyinstallerをインストールする。
- 仮想環境内で、プログラムを動かすのに必要なライブラリのみをインストールする。
- 目的のpyファイルをpyinstallerでexe化する。
Pythonで一生懸命に作成したプログラムを他の人にも使ってもらいたいけど、まだPythonが会社内に浸透しきっていない場合はexeファイル化などの処置が必要になります。
そんな時に、少しでも快適に使ってもらうためにはファイル容量は軽くするに越したことはありません。
Pythonで日頃の業務の面倒なところをラクにしましょう!
【意外と知らない!?】Python初心者必見!驚くべきprint関数の小技5選 - ゼロからの業務効率化ノート
【手軽にPDFを結合!】Pythonを使ったスマートなファイル結合テクニック - ゼロからの業務効率化ノート
【異なるフォルダのPDFも結合!】Pythonでスマートなファイル結合テクニックその2 - ゼロからの業務効率化ノート