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

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

ただいまの
回答率

87.37%

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

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 885

score 13

実現したい事

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • frederick_1974

    2020/01/20 15:46

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

    キャンセル

  • machaco

    2020/01/20 16:26

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

    キャンセル

  • argparse

    2020/01/21 02:28

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

    キャンセル

  • machaco

    2020/01/21 09:40

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

    キャンセル

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

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

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る