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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

1476閲覧

Pythonで作成したGUIアプリの実行ファイルへの変換方法

machaco

総合スコア13

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2020/01/20 06:26

実現したい事

pythonで作成したプログラムをexeに変換したいです。

困っていること

実行ファイルの作成自体は成功していますが、実行すると下記エラーが発生します。
Fatal error detected
Failed to execute script ファイル名

試したこと

いろいろなサイトを見て何度かexe化を試みましたがうまくいきませんでした。
簡単なファイル(メッセージボックスで'Hello Python'と表示させるだけのもの)を作成しexe化したところ、exeファイルの作成はできexeファイルの実行もエラーなくうまくいきました。
pythonのバージョンなどではなく、私が作成したプログラムがおかしいのでは?と考えていますが、何が原因か分かりません。

exe化したいプログラムは以下の通りです。
起動するとGUIを表示します。ファイル参照ボタンとスタート、キャンセルボタンがあるだけのもです。
選択後スタートをクリックで画像の読み込み処理をします。

""" import os,sys from tkinter import * from tkinter import ttk from tkinter import filedialog from tkinter import messagebox import cv2 import numpy as np # **----- クリックイベント -----** # 参照ボタン クリック時の処理 def first_button_clicked(): fTyp = [("","*")] iDir = os.path.abspath(os.path.dirname(__file__)) filepath = filedialog.askopenfilename(filetypes = fTyp,initialdir = iDir) first_flabel.set(filepath) def second_button_clicked(): fTyp = [("","*")] iDir = os.path.abspath(os.path.dirname(__file__)) filepath = filedialog.askopenfilename(filetypes = fTyp,initialdir = iDir) second_flabel.set(filepath) # スタートボタン クリック時の処理 def start_button_clicked(): # **----- 1つ目のファイル -----** # ファイル名の取得 drwfile = os.path.basename(first_flabel.get()) drwpath = os.path.abspath(first_flabel.get()) # 画像情報の取得 first_drw_img = imread(drwpath, 1) first_height = first_drw_img.shape[0] first_width = first_drw_img.shape[1] # **----- 2つ目のファイル -----** # ファイル名の取得 drwfile = os.path.basename(second_flabel.get()) drwpath = os.path.abspath(second_flabel.get()) # 画像情報の取得 second_drw_img = imread(drwpath, 1) second_height = second_drw_img.shape[0] second_width = second_drw_img.shape[1] root.destroy() comparison_img(first_drw_img, second_drw_img) # 2つの画像を比較 def comparison_img(first_drw_img, second_drw_img): red = [0, 0, 255] # 黒背景の行列作成 zeros_img = np.zeros(first_drw_img.shape) # 一致している部分を白色に変換して抽出 comparison = np.where(first_drw_img == second_drw_img, 1, 0) # 等しければ 1、差があれば 0の配列を生成 difference_img1 = np.array(first_drw_img * comparison, dtype = np.uint8) # 異なっている部分を赤色に変換して抽出 comparison2 = np.where(first_drw_img != second_drw_img, red, 0) difference_img2 = np.array(zeros_img + comparison2, dtype = np.uint8) # 相違点のみ抽出 final_img = np.array(difference_img1 + difference_img2, dtype = np.uint8) cv2.imwrite(r'Check_Result.jpg', final_img) full_filepath = os.path.abspath(__file__) filepath = os.path.dirname(full_filepath) root = Tk() root.withdraw() messagebox.showinfo('確認', 'チェック結果を ' + filepath + ' に保存しました。' ) root.destroy() exit() # 日本語pathでも読み込み可能にする def imread(drwfile, flags=cv2.IMREAD_COLOR, dtype=np.uint8): try: n = np.fromfile(drwfile, dtype) drw_img = cv2.imdecode(n, flags) return drw_img except Exception as e: return None # **----- ファイル選択フォーム作成 -----** if __name__ == '__main__': # rootの作成 root = Tk() root.title('ファイル選択') root.resizable(False, False) # Frame1の作成 frame1 = ttk.Frame(root, padding=10) frame1.grid() # Frame2の作成 frame2 = ttk.Frame(root, padding=(0,5)) frame2.grid(row=1) # **----- ボタンの作成 -----** # 1つ目の参照ボタンの作成 first_button = ttk.Button(frame1, text=u'参照', command=first_button_clicked) first_button.grid(row=0, column=3, padx=2) # 2つ目の参照ボタンの作成 second_button = ttk.Button(frame1, text=u'参照', command=second_button_clicked) second_button.grid(row=1, column=3, padx=2) # Startボタンの作成 start_button = ttk.Button(frame2, text='Start', command=start_button_clicked) start_button.pack(side=LEFT) # Cancelボタンの作成 cancel_button = ttk.Button(frame2, text='Cancel', command=root.destroy) cancel_button.pack(side=LEFT) # **----- ラベルの作成 -----** # 1つ目の「ファイル」ラベルの作成 s = StringVar() s.set('ファイル>>') fisrt_label = ttk.Label(frame1, textvariable=s) fisrt_label.grid(row=0, column=0, pady=5) # 2つ目の「ファイル」ラベルの作成 second_label = ttk.Label(frame1, textvariable=s) second_label.grid(row=1, column=0, pady=5) # 1つ目の参照ファイルパス表示ラベルの作成 first_flabel = StringVar() file1_entry = ttk.Entry(frame1, textvariable=first_flabel, width=50) file1_entry.grid(row=0, column=2, pady=5) # 2つ目の参照ファイルパス表示ラベルの作成 second_flabel = StringVar() file1_entry = ttk.Entry(frame1, textvariable=second_flabel, width=50) file1_entry.grid(row=1, column=2, pady=5) root.mainloop()

コマンドプロンプトではexeファイルの作成自体がうまくいかなかったのでアナコンダプロンプトで行っていますが、exe化すると'WARNING: lib not found'の表示がいくつか現れます。'Hello Python'と表示させる簡単なファイルの場合は発生していません。

使用環境

PC:windows 10、python 3.7.3

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

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

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

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

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

frederick_1974

2020/01/20 06:46

exe化した実行ファイルを、ダブルクリックで実行するのではなく、コマンドプロンプトから実行すると詳細な処理内容が表示されますが、どのように表示されますか?
machaco

2020/01/20 07:26

コマンドプロンプトから実施してみましたが、同じ内容のエラー(Fatal error detected)が発生したのみです。コマンドプロンプト上では特に何も起こっていません。 コマンドプロンプトをほぼ使ったことがないのですが、cd でファイルが保存されているディレクトリまでいき、exeファイルのファイル名を入力、またはcall ファイル名で実施でよろしいでしょうか?
argparse

2020/01/20 17:28

exe 化に用いたパッケージとそのバージョン、それと作業手順を教えて頂けますか
machaco

2020/01/21 00:40

pyinstallerです。バージョンは3.6です。 手順は 1. pyinstallerのインストール(pip install pyinstaller) 2. ディレクトリを移動しexe化(pyinstaller ファイル名 --onefile --noconsole)  onefile、noconsoleは無くしたりも試しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問