Jupyter lab/notebookで作ったコードをExe化して実行したい
Jupyter labで、以下のようなコードを作成し、EXE化して配布したいです。
・ファイルダイアログを表示して、複数のcsvファイルを読み込み、データフレーム化
・以下、データフレームをPandasで数値処理して、数値処理したデータに加えて図面を表示
Jupter labで実行した際には、エラーは発生せず、問題なく実行することができました。
そこで、pyinstallerで単一のファイルにexe化して実行すると、ファイルダイアログは表示され、ファイルを選択はできますが、下記のようなエラーが発生して処理が止まってしまいました。
*最初の部分のTry項をコメントアウトしているのは、エラー内容を確認するためです。
発生している問題・エラーメッセージ
Traceback (most recent call last): File <exe化した元ファイルの名前.py> line35, in <module> File <exe化した元ファイルの名前.py> line27, in file dialog AttributeError: 'NoneType' object 'run_line_magic' [11776] Failed to execute script 'exe化した元ファイルの名前' due to unhandled exception!
該当のソースコード
Python
#!/usr/bin/env python # coding: utf-8 # In[1]: ##drophead and normarized ##IWATSU Time_scale = 1e+9 from IPython import get_ipython import pandas as pd import matplotlib.pyplot as plt from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_EVEN normarized = False def file_dialog(): # try: import os, tkinter, tkinter.filedialog, tkinter.messagebox root = tkinter.Tk() root.attributes('-topmost', True) root.withdraw() root.lift() root.focus_force() fTyp = [("","*.csv")] files = tkinter.filedialog.askopenfilenames(filetypes = fTyp) get_ipython().run_line_magic('gui', 'tk') #読み込みテスト df = pd.read_csv(files[0], skiprows=18, usecols=[0,1], header=0) #(chによってcolsを変える) return files # except: # print("データが読み込みできませんでした。形式やデータの内容が正しいか確認してください。") # return file_dialog() print("ファイルの読み込みを行います。IWATSUのDecayデータ・.csvファイルをファイルダイアログから選んでください。") file_dialog_result = file_dialog() files = file_dialog_result print("データの読み込みに成功しました。") for file in files: # tsv (tab-separated values) df = pd.read_csv(file, skiprows=18, usecols=[0,1], header=0) #(chによってcolsを変える) #df = pd.read_csv(file) df.columns = ['Time(s)', 'Ch1 V'] #df["Ch1 V"] = - df["Ch1 V"] Int_min = df['Ch1 V'].max() if Int_min > 0: df['Ch1 V'] = df['Ch1 V'] - Int_min Int_max = df['Ch1 V'].min() Int_max_time = df.loc[df['Ch1 V'] == Int_max,'Time(s)'].values[-1] Int_max_filename = Decimal(str(-Int_max)).quantize(Decimal('0'), rounding=ROUND_HALF_UP) if Int_max_filename < 0: continue df['Time(s)'] = (df['Time(s)'] - Int_max_time) * Time_scale if normarized: df['Ch1 V'] = - df['Ch1 V'] * 1000 else: df['Ch1 V'] = - df['Ch1 V'] #df['Ch1 V'] = (df['Ch1 V'] / Int_max)*1000 fig = plt.figure(figsize=(85/25.4, 85/25.4/2), dpi=128) #plt.scatter(df['Time(s)'], df['Ch1 V'], s=0.4, alpha=0.6, label=Int_max_filename) plt.plot(df['Time(s)'], df['Ch1 V'], lw=1.0) #plt.legend(loc="best") plt.title(file[-30:], fontsize=8) plt.yscale("log") plt.savefig((f'{file}-thum.png'), bbox_inches="tight") plt.show() df = df[['Time(s)', 'Ch1 V']] df = df.rename(columns={'Ch1 V': 'Int'}) df.to_csv(f'{file}-drop-header-{Int_max_filename}.txt', index=False, sep="\t") print("end")
試したこと
pyinstaller <filename> --clean -Fでexe化しています。
必要なパッケージが仮想環境に入っているかどうか確認した。
補足情報(FW/ツールのバージョンなど)
conda version : 4.8.3 conda-build version : 3.18.11 python version : 3.7.7.final.0 virtual packages : __cuda=11.3
解決法
pyinstallerの前に、python XXX.pyで実行することによって確認できる。
余分な行 (get_ipython().run_line_magic('gui', 'tk'))を削除した。
まだ回答がついていません
会員登録して回答してみよう