🍣

Pythonスクリプトを誰でも実行できる形式に!PyInstallerの使い方ガイド🚀

2024/12/30に公開

はじめに

「せっかくPythonでツールを作ったのに、使ってもらいたい相手のパソコンにPythonが入っていない...」
「コマンドラインの操作が分からない人でも簡単に実行できるようにしたい...」
「ライブラリのインストールや設定を相手に説明するのが大変...」

このような悩みを抱えたことはありませんか?

Pythonで作ったプログラムを共有しようとすると、相手のパソコンにPythonがインストールされていないことが多く、せっかく作ったツールを使ってもらえない...という状況によく遭遇します。

そんな悩みを解決するのが、今回ご紹介する「PyInstaller」です。PyInstallerを使うと、Pythonのスクリプトを、Windowsの「.exe」ファイルに変換することができます。
exeファイルは、Pythonがインストールされていないパソコンでも実行できるため、プログラムの共有がとても簡単になります。

PyInstallerって何ができるの?

PyInstallerは、Pythonのプログラムを「配布可能な形式」に変換するためのツールです。

たとえば、以下のような簡単なPythonプログラムがあるとします:

import tkinter as tk
from tkinter import messagebox

def show_message():
    messagebox.showinfo("メッセージ", "こんにちは!")

window = tk.Tk()
button = tk.Button(window, text="クリックしてね", command=show_message)
button.pack()
window.mainloop()

このプログラムを実行するには、通常であれば:

  1. Pythonをインストール
  2. 必要なライブラリをインストール
  3. コマンドラインでプログラムを実行

という手順が必要です。しかし、これを相手に説明するのは大変ですよね。

PyInstallerを使えば、このプログラムを「example.exe」というファイルに変換できます。
exeファイルは、Windowsユーザーにとってはとてもなじみのある形式です。
ダブルクリックするだけで実行できるため、プログラミングの知識がない人でも簡単に使うことができます。

PyInstallerのインストール方法

まずは、PyInstallerをインストールする必要があります。インストールは簡単で、コマンドプロンプトで1行のコマンドを実行するだけです。

コマンドプロンプトの開き方:

  1. Windowsキーを押しながら「R」キーを押す
  2. 「cmd」と入力してEnterキーを押す

黒い画面(コマンドプロンプト)が表示されたら、以下のコマンドを入力してEnterキーを押します:

pip install pyinstaller

インストールが完了すると、「Successfully installed pyinstaller-x.x.x」のような表示が出ます。これで準備完了です。

基本的な使い方

では、実際にPythonプログラムをexeファイルに変換してみましょう。
ここでは例として、前回作成した「ファイル名に作成日を追加するツール」を使用します:

# date_renamer.py
import os
import datetime
import tkinter as tk
from tkinter import filedialog, messagebox

def add_creation_date_to_filename(directory):
    try:
        for filename in os.listdir(directory):
            file_path = os.path.join(directory, filename)
            if os.path.isfile(file_path):
                # ファイルの作成日時を取得
                creation_time = os.path.getctime(file_path)
                creation_date = datetime.datetime.fromtimestamp(creation_time)
                date_prefix = creation_date.strftime("%y-%m-%d_")
                
                # 新しいファイル名を作成して変更
                if not filename.startswith(date_prefix):
                    new_filename = date_prefix + filename
                    new_path = os.path.join(directory, new_filename)
                    os.rename(file_path, new_path)
        messagebox.showinfo("完了", "ファイル名の変更が完了しました!")
    except Exception as e:
        messagebox.showerror("エラー", f"処理中にエラーが発生しました:{str(e)}")

def select_folder():
    root = tk.Tk()
    root.withdraw()  # メインウィンドウを隠す
    folder_path = filedialog.askdirectory(title="処理するフォルダを選択してください")
    if folder_path:
        add_creation_date_to_filename(folder_path)

if __name__ == "__main__":
    select_folder()

このプログラムをexeファイルに変換するには、以下の手順で行います。

  1. プログラムを保存したフォルダに移動

    • コマンドプロンプトで「cd フォルダのパス」と入力
    • 例:cd C:\Users\ユーザー名\Documents\Python
  2. 変換コマンドを実行

pyinstaller --onefile --windowed --name "DateRenamer" date_renamer.py

このコマンドの意味を詳しく見ていきましょう。

  • pyinstaller: PyInstallerを実行
  • --onefile: すべての必要なファイルを1つのexeファイルにまとめる
  • --windowed: コマンドプロンプトを表示しない(GUIアプリケーション用)
  • --name "DateRenamer": 作成するexeファイルの名前を指定
  • date_renamer.py: 変換するPythonファイル

コマンドを実行すると、PyInstallerが以下の処理を行います。

  1. プログラムの解析

    • 使用しているライブラリの確認
    • 必要なファイルの特定
  2. 必要なファイルの収集

    • Pythonの実行環境
    • 使用しているライブラリ
    • プログラム本体
  3. exeファイルの生成

    • distフォルダの中に「DateRenamer.exe」が作成されます

実行が完了すると、以下のようなフォルダ構造になります:

date_renamer.py(元のPythonファイル)
build/(一時ファイル)
dist/
    └── DateRenamer.exe(作成されたexeファイル)

この「dist」フォルダの中にある「DateRenamer.exe」が、配布可能な実行ファイルです。
このファイルを他の人に渡せば、Pythonがインストールされていなくても、プログラムを実行することができます。
※DateRenamer.exe以外のフォルダ、ファイルは削除して大丈夫です。

便利な使い方のヒント

プログラムの種類や目的に応じて、様々なオプションを使うことができます。

コンソールアプリケーションの場合

コマンドプロンプトに文字を表示するタイプのプログラムの場合は、--windowedオプションを外します。

pyinstaller --onefile --name "CommandLineApp" your_script.py

アイコンを設定する

作成したexeファイルにオリジナルのアイコンを設定することもできます。アイコンは.ico形式のファイルを用意する必要があります。

pyinstaller --onefile --windowed --icon=my_icon.ico --name "MyApp" your_script.py

よくあるトラブルと解決方法

1. 「モジュールが見つからない」というエラーが出る場合

このエラーは、PyInstallerが必要なライブラリを正しく検出できなかった場合に発生します。この場合は、明示的にライブラリを指定する必要があります。

pyinstaller --onefile --windowed --hidden-import=ライブラリ名 your_script.py

2. 作成したexeファイルが起動しない場合

このような場合は、デバッグモードでビルドすることで、エラーの原因を特定できます。

pyinstaller --onefile --windowed --debug your_script.py

実行時にエラーメッセージが表示されるので、それを元に問題を解決できます。

3. exeファイルのサイズが大きすぎる場合

PyInstallerは必要なファイルをすべて含めるため、exeファイルのサイズが大きくなることがあります。サイズを小さくするには、UPX圧縮を使用します。

  1. UPXをダウンロードして解凍(https://upx.github.io/)
  2. 以下のコマンドでビルド
pyinstaller --onefile --windowed --upx-dir="UPXのフォルダパス" your_script.py

それでは、"よくあるトラブルと解決方法"のセクションに、no such file or directoryエラーについての内容を追加してみましょう。既存の内容との整合性を保ちながら、同じ親しみやすい説明調で記述します。

4. 「No such file or directory」エラーが表示される場合

このエラーは、プログラムが必要なファイルやフォルダを見つけられない場合によく発生します。特に以下のような状況で起きやすいです。

  1. 相対パスの問題
    • プログラム内で「./data/config.txt」のような相対パスを使用している場合、exeファイル実行時にパスが正しく解決されないことがあります
    • 解決方法:以下のようにパスを取得する処理を追加します
import sys
import os

# exeファイルの場所を基準にパスを解決
if getattr(sys, 'frozen', False):
    # PyInstallerで作成したexeの場合
    application_path = sys._MEIPASS
else:
    # 通常のPythonスクリプトの場合
    application_path = os.path.dirname(os.path.abspath(__file__))

# ファイルパスの例
config_path = os.path.join(application_path, 'data', 'config.txt')
  1. 外部ファイルの配置
    • 画像やデータファイルなどの外部ファイルを使用している場合は、--add-dataオプションを使って明示的に含める必要があります
    • 以下のようにビルドコマンドを実行します:
pyinstaller --onefile --windowed --add-data "data/*;data" your_script.py

※ Windowsの場合は;、MacやLinuxの場合は:でパスを区切ります

  1. 実行時のヒント
    • エラーメッセージを詳細に表示するために、一時的に--windowedオプションを外してビルドすると、問題の特定がしやすくなります
    • ファイルパスが正しく解決されているか確認するために、以下のようなデバッグ用のコードを追加すると便利です:
print(f"現在のパス: {os.getcwd()}")
print(f"実行ファイルのパス: {application_path}")
print(f"探しているファイルのパス: {config_path}")

このようなパス関連のエラーは、開発環境では発生せずに、exe化した後で初めて気づくことが多いため、配布前に必ず別環境でテストすることをお勧めします。

実践的なアドバイス

プログラムのテスト

exeファイルを配布する前に、以下の点を確認しましょう。

  1. 新しい環境でテスト

    • 別のパソコンで動作確認
    • できるだけPythonがインストールされていない環境で
  2. エラー処理の確認

    • 想定外の操作をしても安全に終了するか
    • エラーメッセージは分かりやすいか

配布時の注意点

  1. ウイルス対策ソフトの警告

    • PyInstallerで作成したexeファイルは、ウイルス対策ソフトに誤検知されることがあります
    • 必要に応じて、プログラムの安全性を説明する文書を添付
  2. 使い方の説明

    • 簡単な説明書(README.txt)を作成
    • スクリーンショットなどを使って分かりやすく

まとめ

PyInstallerを使うことで、Pythonプログラムの配布がとても簡単になります。
特に以下のような場面で効果を発揮します。

  • 社内で使用するツールの配布
  • 技術に詳しくないユーザーへのプログラム提供
  • プロトタイプの共有

プログラミングの醍醐味の1つは、作ったものを他の人と共有することです。
PyInstallerを使えば、その障壁を大きく下げることができます。

ぜひこの記事を参考に、あなたの作ったプログラムを多くの人と共有してみてください!
分からないことがあれば、コメント欄でお気軽に質問してくださいね。

Discussion