質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3879閲覧

【Python】.exe化したらエラーが発生した【Tkinter/PyInstaller】

netz-eng

総合スコア105

PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2020/07/20 02:31

前提・実現したいこと

Tkinterを用いて、GUIを作成しています。

以下のようなコードでGUIを作りました。
この内容を.pyファイルで問題なく実行できることを確認したあと、Pyinstallerを用いて.exe化したところ、以下のようなエラーが発生し、GUIが表示されませんでした。

※該当のソースコードは質問用に簡略化したものなので、エラーメッセージの行数と該当箇所が一致していません。
ここでは、21行目でエラーが起きています。

エラーの内容をネットで調べてみましたが、似た現象で悩んでいる方も見つからず、困っています。
お詳しい方や、何か心当たりのある方、ご回答よろしくお願いします!

該当のソースコード

python

1import tkinter as tk 2import tkinter.ttk as ttk 3from tkinter import filedialog 4from tkinter import messagebox 5 6 7 8win = tk.Tk() 9win.resizable(False, False) 10pad = {"padx": 5, "pady": 5} 11pad2 = {"padx": 5, "pady": 10} 12pad3 = {"padx": 5, "pady": 2} 13we = tk.W + tk.E 14cen = tk.CENTER 15 16win.title("tkinter") 17 18#フレーム1 19fra_top = tk.Frame(win, cnf=pad) 20fra_top.pack(expand=True, fill="x", padx=10) 21fra_top.columnconfigure([1, 3, 5], weight=1) 22fra_top.rowconfigure([0, 1, 2], weight=1) 23 24lbl1 = ttk.Label(fra_top, text="ファイルのパス:") 25lbl1.grid(row=0, column=0, cnf=pad, sticky=we) 26tex1 = tk.Entry(fra_top, width=50) 27tex1.grid(row=1, column=0, cnf=pad, sticky=we) 28 29lblvoid = ttk.Label(fra_top, text="") 30lblvoid.grid(row=2, column=0, cnf=pad) 31 32 33#フレーム2 34fra_mid = tk.Frame(win, cnf=pad) 35fra_mid.pack(expand=True, fill="x", padx=10) 36fra_mid.columnconfigure([1, 3, 5], weight=1) 37fra_mid.rowconfigure([0, 1, 2], weight=1) 38 39lbl2 = ttk.Label(fra_mid, text="  ああああああ [a]:") 40lbl2.grid(row=0, column=0, cnf=pad) 41tex2 = tk.Entry(fra_mid) 42tex2.grid(row=0, column=1, cnf=pad, sticky=we) 43 44lbl3 = ttk.Label(fra_mid, text="  ばばばばばば [b]:") 45lbl3.grid(row=1,column=0, cnf=pad) 46tex3 = tk.Entry(fra_mid) 47tex3.grid(row=1, column=1, cnf=pad, sticky=we) 48 49lbl4 = ttk.Label(fra_mid, text="くくくくくくくく [c]:") 50lbl4.grid(row=2, column=0, cnf=pad) 51tex4 = tk.Entry(fra_mid) 52tex4.grid(row=2, column=1, cnf=pad, sticky=we) 53 54lblvoid2 = ttk.Label(fra_mid, text="") 55lblvoid2.grid(row=3,column=0, cnf=pad2) 56 57#フレーム3 58fra_mid2 = tk.Frame(win, cnf=pad) 59fra_mid2.pack(expand=True, fill="x", padx=10) 60fra_mid2.columnconfigure([1, 3, 5], weight=1) 61fra_mid2.rowconfigure([0, 1, 2], weight=1) 62 63btnStyle = ttk.Style() 64btnStyle.configure("BoldBtn", weight="bold") 65btn = tk.Button(fra_mid2, text="ボタン", bg="#4682B4", fg="#FFFFFF", font=("",12,"bold","roman","normal","normal"), height=2, width=10, command=btn_click) 66#ボタンの関数に関しては省略 67 68 69#フレーム4 下余白 70fra_mid3 = tk.Frame(win, cnf=pad3) 71fra_mid3.pack(expand=True, fill="x", padx=10) 72fra_mid3.columnconfigure([1, 3, 5], weight=1) 73fra_mid3.rowconfigure([0, 1, 2], weight=1) 74 75lblvoid3 = ttk.Label(fra_mid3, text="") 76lblvoid3.grid(row=0,column=0, cnf=pad3) 77 78 79 80win.mainloop()

発生している問題・エラーメッセージ

Traceback (most recent call last): File "tkGUI.py", line 31, in <module> fra_top.columnconfigure([1, 3, 5], weight=1) File "lib-tk\Tkinter.py", line 1447, in grid_columnconfigure File "lib-tk\Tkinter.py", line 1437, in _grid_configure _tkinter.TclError: grid columnconfigure: illegal index "[1," [8012] Failed to execute script tkGUI

試したこと

以前こちらで教えていただいた通り、下記のサイトの内容を参考に.specファイルを書き換えてみましたが、実行できませんでした。
https://qiita.com/cheuora/items/39b3203400e1e15248ed

エラーの内容から、columnconfigureの書式に問題があるのは分かるのですが、ベタ打ちや.pyファイルとして実行した場合に問題なく実行できている手前、何がいけないのかよく分かりません。

補足情報(FW/ツールのバージョンなど)

Python 3.7.4
tkinter 8.6.9

teamikl👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

File "lib-tk\Tkinter.py", line 1437, in _grid_configure

exe化時に Python2.x の Tkinter が使われてるようです。

PyInstaller をインストールした環境や、
exe作成時のオプション等を見直してください。


Python 2.7 で再現

python

1import Tkinter as tk 2root = tk.Tk() 3frame = tk.Frame(root) 4frame.pack() 5frame.columnconfigure([1, 3, 5], weight=1) 6root.mainloop()
_tkinter.TclError: grid columnconfigure: illegal index "[1,"

投稿2020/07/20 04:19

teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

netz-eng

2020/07/20 04:30

ご回答ありがとうございます なるほど……Python2.xのTkinterになっているんですね PyInstallerインストール時のスクショを見返してみましたが、確かに「Python 2.7」という表記があります。以前誤って古いバージョンのPythonをインストールしてしまっていたのですが、これが原因だったみたいです ただ、現在開発しているPC内にはもうPython 2.7はなく、アンインストールしてある状況です この場合、PyInstallerをアンインストールし、再インストールしてみればいいんでしょうか……? 質問本文の主旨からは外れてしまいますが、ご意見を伺いたいです! よろしくお願いします
teamikl

2020/07/20 05:11 編集

他にライブラリだけがどこかに残っている可能性もありますね。 ビルド環境の構築は、Python3.x の venv で開発用の仮想環境を作り pyinstaller をインストールするのがお勧めですが、 時点で再インストールですね。インストール経路にもよりますが ものによっては2.x用/3.x用でパッケージが別れている場合もあることに注意してください。
netz-eng

2020/07/20 07:57

ありがとうございます ①venvで仮想環境を作り、pipでインストールを試みましたが、うまくいきませんでした $ pip install pyinstaller を実行してみましたが、 Could not find a version that satisfies the requirement pyinstaller (from versions: ) no matching distribution found for pyinstaller というエラーが出て、インストールすることができませんでした ②コマンドプロンプト上で、 $ pip uninstall pyinstaller $ pip install pyinstaller を試してみましたが、結果は質問時と同じでした Python 2.xで動いているようです 残ったPython 2.xのライブラリの消去法も分からず、わりと八方手詰まりです…… Pythonのバージョンを指定してライブラリをインストールする方法など、ご存じありませんか?
teamikl

2020/07/20 08:36

> バージョンを指定して というのが、「Python3.x の venv で開発用の仮想環境を作り・・・」 なのですが、仮想環境でない場合はpip3 では? (pip -V で*pythonの* バージョンを確認してみてください) ---- 他の方法 対象のPythonのフルパスを指定して -m pip で pip を使います /path/to/python3 -m pip install pyinstaller
netz-eng

2020/07/21 00:57

ご回答ありがとうございます ①pip -VでPythonのバージョンを確認したところ、 pip 19.3.1 from C:\Users\~\Python\envs\opencv\lib\site-packages\pip (python 2.7) と表示されました。前回のご指摘通り、Python 2.xのライブラリ(?)が残ってしまっているようです ②[フルパス] -m pip install pyinstaller を試しました。結果は、 WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pyinstaller/ WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pyinstaller/ WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pyinstaller/ WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pyinstaller/ WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/pyinstaller/ ERROR: Could not find a version that satisfies the requirement pyinstaller (from versions: none) ERROR: No matching distribution found for pyinstaller WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. ……という具合で、仮想環境でpip installを実行したときと同じエラーが出てしまいました pip が Python 2.xに紐づいているのが原因かと思われるのですが、これを解消するためにはどうすればよいでしょうか?
teamikl

2020/07/21 05:33

恐らく環境問題なので、どのように環境構築したのかを正確に把握する必要があります。 - 複数のPythonをインストールされてないでしょうか - 仮想環境が2.x になっていませんか? [フルパス] -V で 3.x 系のバージョンが表示されますか? - どのようなコマンドで仮想環境を作ったか。 >venvで仮想環境を作り、 これは新規に作ってから試しましたか?(確認) venvでの仮想環境構築は python.exe の実行ファイルをコピーするので、 システムの2.7 をアンインストールしても、仮想環境の実行ファイルは残ります。
netz-eng

2020/07/21 05:53

ご丁寧にありがとうございます 私、初学者のためご迷惑をおかけします…… ・Pythonを始めた頃、誤って複数のバージョンのPythonをインストールしていました  確認したところ、Python 3.7.4の下位フォルダ[envs]→[openCV]内に、python.exe(バージョンは2.7)が入っていました ・仮想環境のバージョンは、3.7.4になっています ・仮想環境は、 python3 -m venv venv というコマンドで作成しました ・仮想環境は、今回新規に作ったものです
teamikl

2020/07/21 06:34

windowsの様なので py コマンド でバージョン指定も可能ですね。 envs フォルダは anaconda ですか?それとも自分で作ったフォルダの名前? (anacondaの場合 conda コマンドを使います、pipは使わないほうが良い) 取り合えずは、SSL関連の警告を直しましょう。 これが原因で pyinstaller を探せてない様です。 参考: Windows10 pipでSSLエラーが出た時の対処 https://qiita.com/atsonic/items/be5cdc7cf066ae947426 事前確認 & 事後確認 Pythonを対話モードで開いて >>> import ssl 1. 事前確認: import ssl でエラーが出るのを確認する 2. 上記URLの対処を試してみる。(ユーザ権限に注意。又、バックアップ等忘れずに) 3. 事後確認: import ssl でエラーが出ないことを確認する - - - - - - 以下は上の対処が出来てから - - - - - pip -V で 3.7.4 が表示される環境作りを目指しましょう ## 仮想環境を作るpythonのバージョン確認 (NAMEの部分は任意の名前・ディレクトリ名) > py -3.7 -V > py -3.7 -m venv NAME ## 仮想環境に入る > cd NAME > call Scripts\activate.bat ## 仮想環境内のバージョンを確認 > python -V > pip -V # 3.7.x が表示されていれば > pip install pyinstaller バージョン確認で 2.7 が出たらそこで中断して、 それまでに入力したコマンドを省略なく教えてください。 (出力結果は、まずはバージョンの部分のみで良いです)
netz-eng

2020/07/21 13:43

envsフォルダは、自分で名付けてはいないのでanacondaだと思います ということは、pipではなくcondaコマンドを使ったほうがいいんですね 早速教えていただいたことを試したいところですが、分散出勤の関係上、次にPythonに触れられるのが次の月曜日になってしまいます ご丁寧に説明していただいたところ恐縮ですが、週明けすぐにやってみてから、またご相談させていただければ……と思います! お時間を割いていただいたうえ、お待たせしてしまって申し訳ありませんが、もう暫くお力添えいただけると嬉しいです
teamikl

2020/07/21 20:10

PyInstallerインストール時・実行時のエラーについて https://qiita.com/rebellious-wimp/items/61f16389f957b2ace163 問題自体は別の問題なのですが、anaconda/pyinstaller利用という事で 参考になる部分はあると思います。要点だけ搔い摘むと - anaconda での環境構築は conda create - インストールには pip の代わりに (環境内で) conda install を使う openCV等のライブラリを使われる場合は、pipでのインストールは難しいので anaconda 環境を作って、コンパイル済みのパッケージを使う方が楽でしょうね。 但し、その場合は、pipを使ってインストールしてる他のライブラリも、 conda で同じライブラリがインストールできるものがないか独自に探す必要があります。 ウェブサイトや書籍を参考にする際は、混在させないように注意が必要です。 anaconda環境が必要が無ければ、venv+pipでも問題はありません (インストールしたのがanacondaのPythonであっても、venvで独立した環境を作ります) 問題になるケースは、仮想環境「外」で、anaconda環境に対して pip でインストールするケース、 や conta create で構築した環境での pip の利用です。 この場合、conda install でインストールしたパッケージと pip のものが競合します。 SSLのエラーはこれらとは独立した問題なので、 もし同様のエラーが出るならば、別件で解消しておきましょう。 (pythonでのhttpsへのアクセス全般等、他に影響があるかもしれません) ---- 時間は気にせずに、ご自分のペースで進めて下さい。 今の所、仮想環境を作る方向で話を進めてますが、再インストールという手段もお忘れなく。 いろいろと試してるうちに自分でどういう環境・状況に陥ってるか解らなくなることがあるので、一旦 リセットするのも手です。また、そういった状況を避ける為には、作業履歴を取ることをお勧めします。
netz-eng

2020/07/27 07:04

長い間お待たせしました > 時間は気にせずに、ご自分のペースで進めて下さい。 そう言っていただけると助かります 結論から申し上げると、問題を解決することができました! おっしゃる通り、自分でも現在構築されている環境がわからなくなってしまったため、別のPCで一から環境を構築してみることにしました 教えていただいた通りにcondaを用いてpyinstallerのインストールなどを行い、試行錯誤した結果、質問文のコードを.exe化し、問題なく実行することができました 長い間丁寧に寄り添って教えていただき、本当にありがとうございます。自分だけではどうにもできませんでした これからもteratailで質問をすることがあるかと思いますので、もしまた私の質問が目に留まった際は、お力添えいただければ嬉しいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問