1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

tkinterdnd2を利用したPythonプログラムがexe化に失敗したときの対応

Posted at

標準ではないライブラリを使用しているPythonプログラムをexe化する

友人が作成したPythonプログラムのexe化に難航したので対応をまとめておきます。
exe化にはPyInstallerを使用しました。
仮想環境の構築にはPipenvを使用しました。

実行環境

  • Windows11
  • PowerShell
  • Python 3.10.6

目次

  • 手順
  • 失敗したときのこと
  • 参考サイト

手順

  1. Python3がインストールされていることの確認する
  2. Pipenvをインストールする
  3. 仮想環境を構築する
  4. .pyプログラムに記載されているもののうち、必要なライブラリをインストールする
  5. PyInstallerをインストールする
  6. PyInstallerでpyファイルをexe化する
  7. 仮想環境を削除する

1.Python3がインストールされていることを確認する

PowerShellを起動します。Python3がインストールされているか確認します。

python3 --version

インストールされていない場合はPython3をインストールします(手順は割愛)。

2.Pipenvをインストールする

Pipenvがインストールされているか確認します。

pipenv --version

インストール済なら以下のコマンド実行はスキップし、手順3へ。
以下のコマンドでPipenvをインストールします。

pip install pipenv

3.仮想環境を構築する

仮想環境を作るフォルダ(.pyが置いてある)パスへ移動します。

cd [フォルダパス]

仮想環境を有効化します。

pipenv --python 3.10
pipenv shell

4. .pyプログラムに記載されているもののうち、必要なライブラリをインストールする

今回使ったライブラリは以下の通りです。うち太字のものは追加インストールが必要なため、pipを利用してインストールします。

  • tkinter
  • tkinterdnd2
  • Pillow
  • pyperclip
  • os
pip install tkinterdnd2 Pillow pyperclip

5. PyInstallerをインストールする

以下のコマンドでPyInstallerをインストールします。

pip install pyinstaller

6. PyInstallerでpyファイルをexe化する

以下のコマンドでexeファイルを生成します。distフォルダ内に.exeができます。
生成されたexeは単体で実行可能です。

pyinstaller color_picker.py --onefile --collect-data tkinterdnd2

オプションについて

  • --onefile
    distフォルダに出力されるexeを1ファイルにまとめます。

  • --collect-date
    tkinterdnd2をパッケージ化するのに必要です。このオプションを付けずに生成したexeを実行した際、ライブラリの読み込みに失敗します。

7. 仮想環境を削除する

仮想環境のshellから抜け、仮想環境を削除します。

exit
pipenv --rm

失敗したときのこと

2つの理由でexe化に難航しました。

  1. PyInstallerオプションの「--collect-date」がなかなか見つからなかった
  2. ChatGPT3.5に質問したら、「.specの設定を変更する」を案内されたが、うまくいかなかった

「--collect-data」オプションを付けずに生成したexeは、ライブラリの読み込みで失敗していることが分かりました。
「4. .pyプログラムに記載されているもののうち、必要なライブラリをインストールする」で、ライブラリのインストールは完了していたため、PyInstallerでexe化する際に何らかの失敗しているのだと考えました。
そこで、ChatGPT3.5にエラー内容とその解消方法を質問したところ、.specを編集する方法を案内されました。内容は以下の通りです。

  • PyInstallerのオプションに「--hidden-import」を設定
  • .specを編集し、hiddenimportsにライブラリを記載する
    しかし、案内された方法で生成したexeは、同じライブラリ読み込み失敗エラーとなりました。

まず前提として、ChatGPTでプログラムを書いていました。そのため、プログラムに関する質問はChatGPTに質問する形で修正していました。
しかし何度聞いても上記以外の回答は得られず、結局ググって「--collect-date」が最適だとわかりました。

参考サイト

ありがとうございました!

PyinstallerでPythonプログラムをexe化する手順書(Windows編)

tkinter でドラッグアンドドロップ!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?