こんにちは、Zero-Cheeseです。
Pythonでプログラムを完成させたら、次は何をしますか?
多くの人が、「他人に配布、もしくは公開!」だと思いますが、意外と簡単ではありません。
当たり前ですが、他人のPCにPythonがインストールしていないと、動かないからです。
本記事では、やっとの思いで作成したプログラムを、他人のPCできちんと動かすための、
- 実行可能ファイルの作成方法を
徹底的に解説します。
はじめに
実行ファイル化することの重要性
繰り返しになりますが、PythonがインストールされていないPCでは、Pythonが動きません。
また、Pythonがインストールされていたとしても、使用した外部ライブラリ(例えばNumpyなど)が一つでも足りないと、エラーが発生してしまいます。
これらの問題を解決するために、実行ファイル化することは、極めて重要です。
PyInstallerは、Pythonスクリプトを、実行可能ファイルに変換する「ツール」です。
この記事では、
- PyInstallerのメリット・デメリット を解説した後、
- PyInstallerの基本的な使い方の解説、
- サンプルプログラムを使って、実際の使い方を体験していただき
- よく発生するトラブルシューティング対応を
徹底的に、解説します。
PyInstallerのメリット・デメリット
PyInstallerと他のツール(cx_Freeze、py2exe、Py2appなど)を比較した場合の、メリット・デメリットをまとめました。
メリット
- さまざまなOSに対応(Windows、Mac、Linux)
- 使いやすい(コマンドラインから、簡単に実行ファイルの作成が可能。また、使用しているライブラリを自動検出し、実行ファイルに含めてくれる。)
デメリット (下記は他のツールでも、共通して発生)
- ファイルサイズが、大きくなる可能性あり(Pythonインタプリタ、ライブラリを含むため)
- 実行速度が遅くなる可能性あり(元のPythonスクリプトに対して)
- セキュリティの懸念(逆コンパイルが可能)
PyInstallerのインストール方法
pipを使って、簡単にインストールすることができます。
pip install pyinstaller
pipに関しまして、詳細な解説は、こちらまで
PyInstallerの基本的な使い方
実行ファイル化する方法として、主に2種類のモードがあります。
- 単一のファイルモード
- ディレクトリモード
それぞれの方法を、ご紹介します。
実行ファイル形式は、各OSに適した形式で、生成されます。
- Windows → EXEファイル
- MAC → APPファイル
- Linux → 拡張子のない、バイナリファイル
Windowsから、MAC用のAPPファイルは作れません。ご注意下さい。
コマンドラインからの操作方法をご紹介します。
(Pythonスクリプトから、実行ファイル化する方法もあります。)
単一のファイルモード
- 一つの実行ファイルに、まとめるモードです。
Pythonスクリプトと、関連ファイル(画像、データファイルなど)が、一つの実行ファイルに、まとめられます。
コマンドは、以下の通りです。
pyinstaller --onefile <スクリプト名>.py
生成が成功すると
- distディレクトリが作られ、その中に、実行ファイルが保存されます。
厳密には、下記もあわせて、生成されます。(次章で説明する、ディレクトリモードも同じ)
- buildディレクトリの生成。実行可能ファイルを生成する過程で、一時的に使用するファイルが、格納
- 〇〇.specファイルの生成。PyInstallerはこのファイルを使用して、実行可能ファイルを生成
ディレクトリモード
- 一つのディレクトリにまとめるモードです。
このディレクトリには、実行ファイルと共に、必要なすべてのライブラリやデータファイルが、含まれます。
コマンドは、以下の通りです。
pyinstaller <スクリプト名>.py
その他、よく使用されるオプション
--windowed
or-w
: GUIアプリケーションの実行時、同時に表示される、コンソールウィンドウを消去。--name=<名前>
: 生成される実行ファイルやディレクトリ名を指定。--icon=<アイコン>
: 実行ファイルのアイコンを指定。--distpath=<ディレクトリ名>
: 出力ディレクトリのパスを指定。
使用例:
pyinstaller --onefile -w --icon=myicon.ico --name=MyApp <スクリプト名>.py
サンプルプロジェクトを通して、実際の使い方を、実感する
本章では、価格.comのサイトから価格を取得し、画面に出力するPythonプログラムを作成します。
手順:
- 必要なライブラリをインストール
- 価格.comのサイトをWebスクレイピングして、価格を取得する「Pythonコード」を作成
- PyInstallerを使用して、実行可能ファイルに変換
- 生成された実行可能ファイルを、実行
本章では、Webスクレイピングのため、「beautifulsoup4」を使用します。
「詳細な使い方をマスターしたい!」と思われた方、下記Udemy講座が「分かりやすかった」です!(みんなの評価も、高いです。)
Pythonによるビジネスに役立つWebスクレイピング(BeautifulSoup・Selenium・Requests)
① 必要なライブラリをインストール
pipにて、インストールします。
pip install beautifulsoup4
pip install pyinstaller
pip install requests
※ 見やすいように、各行に分けた書き方をしています。(1行で、実行してもOKです。)
② 価格.comのサイトをWebスクレイピングして、価格を取得する「Pythonコード」を作成
今回は、スクレイピングにて、「GPU Nvidia RTX4070」の値段とShop名を取得」しました。
具体的には、下記モデルです。(LED等で着飾らなく、信頼のあるASUSから出しているVENTUSが、筆者のお気に入りとなってきました。)
Webスクレイピングを行う際は、対象のウェブサイトの利用規約を確認し、違反しないよう注意が必要です。
Pythonコードのファイル名を、「fetch_prices.py」とします。
「価格.com」のHTML構造が変わると、正常に動かない可能性があります。(2023年9月時点に作成)
以下、コード内容です。
import requests
from bs4 import BeautifulSoup
def fetch_prices_and_shops(url):
response = requests.get(url)
response.encoding = 'Shift_JIS'
soup = BeautifulSoup(response.text, 'html.parser')
rows = soup.select('#mainLeft > table > tr')
data = []
for i, row in enumerate(rows):
if i < 2: # Skip header rows
continue
price_selector = 'td.p-priceTable_col.p-priceTable_col-priceBG > div > p.p-PTPrice_price'
shop_selector = 'td.p-priceTable_col.p-priceTable_col-shopInfo > div > div.p-PTShop_info > div.p-PTShopData > p.p-PTShopData_name > a'
price = row.select_one(price_selector)
shop = row.select_one(shop_selector)
if price and shop:
data.append([price.text, shop.text])
return data
url = 'https://kakaku.com/item/K0001529517/' # 価格.comのURL
data = fetch_prices_and_shops(url)
print(f'取得したデータ: {data}')
SHIFT_JIS であること、注意しましょう。
結果: 下記が表示されます。
取得したデータ: [['¥85,980', 'XPRICE'], ['¥85,980', 'OCNオンラインショップ(旧NTT-X)'], ['¥88,750', 'ドスパラ'], ['¥88,750', 'パソコン工房'], ['¥89,800', 'PCワンズ'], ['¥90,408', 'Qoo10 EVENT'], ['¥94,660', 'ヨドバシ.com'], ['¥94,660', 'e-zoa-lite.com'], ['¥94,660', 'e-zoa.com'], ['¥96,511', 'グッドウィル\n'], ['¥96,735', 'AcademicStore'], ['¥97,160', 'PREMOA\n'], ['¥97,160', '[Amazon] XPRICE\n'], ['¥99,800', 'Joshin'], ['¥99,800', 'TSUKUMO'], ['¥99,800', 'PCSHOPアーク'], ['¥99,800', 'ゲーミングPcan'], ['¥100,808', 'Amazon.co.jp'], ['¥102,080', 'e-tokka'], ['¥106,040', 'ゆたぷろ'], ['¥106,673', 'e-tokka GOLD'], ['¥128,508', 'アスクル法人向け']]
③ PyInstallerを使用して、実行可能ファイルに変換
上記のプログラムを、PyInstallerを使って、実行可能なファイルに変換します。
pyinstaller --onefile fetch_prices.py
④ 生成された実行可能ファイルを、実行する
PyInstallerが生成した「dist
ディレクトリ」に移動し、生成された実行可能ファイルを実行します。
cd dist
./fetch_prices
PyInstallerを使った方法、イメージがついたでしょうか?
PyInstaller トラブルシューティング対応
この章では、PyInstallerでよく発生する問題と、その解決策について解説します。
よく発生する問題:
- ライブラリが見つからない
- 実行可能ファイルが動作しない
- ファイルサイズが、大きくなりすぎる
① ライブラリが見つからない
通常は、以下の状況で発生します。
- ライブラリがインストールされていない。
- 実行可能ファイル生成時に、ライブラリへのパスが正しくない。
ライブラリがインストールされていない場合
例:エラーメッセージがNo module named 'requests'
の場合、requests
ライブラリをインストールする。
pip install requests
ライブラリをインストールした後、実行可能ファイルを、再度生成する必要があります。
pyinstaller myscript.py
実行可能ファイル生成時に、ライブラリへのパスが正しくない
実行可能ファイル生成時、「コード中にimportされたライブラリが、PyInstallerによって見つけられない場合」に発生します。
解決策は、--path
オプションを使用して、ライブラリの検索パスを追加します。
pyinstaller --path /path/to/module myscript.py
② 実行可能ファイルが動作しない
PyInstallerで生成された実行可能ファイルを実行しても、何も起こらない、またはエラーメッセージが表示されることがあります。
ライブラリが見つからない場合(ImportError: No module named 〇〇)は、前章を参考にして下さい。
エラーメッセージが表示される場合、そのエラーに基づいて適切な対策を取ります。
エラーメッセージが表示されない場合、もしくは、はエラーメッセージから原因が特定できない場合、デバッグ情報を取得することが可能です。
pyinstaller --debug all myscript.py
③ ファイルサイズが大きくなりすぎる
PyInstallerは、生成された実行可能ファイルに、依存関係含め、すべての必要なライブラリを含めるため、ファイルサイズが非常に大きくなる可能性があります。
解決策は、以下の通りです。
- Pythonの仮想環境を作成し、必要なライブラリだけをインストールする
- 不要なモジュールを除外する
- 実行可能ファイルの圧縮する
Pythonの仮想環境を作成し、必要なライブラリだけをインストールする
下記コマンドは、一例です。
仮想環境の作成
python -m venv myenv
仮想環境のアクティベート
# Windowsの場合
.\myenv\Scripts\activate
# Mac、Linuxの場合
source myenv/bin/activate
必要なライブラリのインストール
pip install requests beautifulsoup4
PyInstallerを使用して実行可能ファイルを生成する
pyinstaller myscript.py
不要なモジュールを除外する
不要なモジュールを除外するには、--exclude-module
オプションを、使用します。
pyinstaller --exclude-module unwanted_module myscript.py
実行可能ファイルの圧縮する
UPX(Ultimate Packer for eXecutables)を使用すれば、ファイルサイズを縮小することが、可能です。
◆ UPXのインストール方法
Windows:
- UPXの公式GitHubリリースページ から、Windows用の最新バージョンのUPXをDL
- ZIPファイルを解凍し、
upx.exe
のPATHを通す or コマンドプロンプトからアクセス可能な場所に保存
Mac:
# Homebrew によるインストールが、簡単です
brew install upx
Linux:
# aptが使える、ディストリビューションの場合:
sudo apt install upx
◆ 実行可能ファイルの生成
例えば、WindowsでUPXをC:\path\to\upx
に保存した場合
pyinstaller --upx-dir=C:\path\to\upx myscript.py
実行可能ファイルのサイズを小さくすることで、一部の機能やパフォーマンスに、影響を与える可能性があります。
さいごに
PyInstallerを使用して、Pythonスクリプトを実行可能ファイルに変換することは、多くの場合、非常に便利です。
この記事では、PyInstallerの使い方と、エラーの対処法に関して、詳しく解説しました。
この記事が、あなたの役に立つことができれば、幸いです。
本記事も、最後までお付き合いいただき、ありがとうございました。
また、お会いしましょう!