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
1#!/usr/bin/env python 2# coding: utf-8 3 4# In[1]: 5 6##drophead and normarized 7##IWATSU 8Time_scale = 1e+9 9from IPython import get_ipython 10import pandas as pd 11import matplotlib.pyplot as plt 12from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_EVEN 13 14normarized = False 15 16def file_dialog(): 17# try: 18 import os, tkinter, tkinter.filedialog, tkinter.messagebox 19 root = tkinter.Tk() 20 root.attributes('-topmost', True) 21 root.withdraw() 22 root.lift() 23 root.focus_force() 24 fTyp = [("","*.csv")] 25 files = tkinter.filedialog.askopenfilenames(filetypes = fTyp) 26 get_ipython().run_line_magic('gui', 'tk') 27 #読み込みテスト 28 df = pd.read_csv(files[0], skiprows=18, usecols=[0,1], header=0) #(chによってcolsを変える) 29 return files 30# except: 31# print("データが読み込みできませんでした。形式やデータの内容が正しいか確認してください。") 32# return file_dialog() 33print("ファイルの読み込みを行います。IWATSUのDecayデータ・.csvファイルをファイルダイアログから選んでください。") 34file_dialog_result = file_dialog() 35files = file_dialog_result 36print("データの読み込みに成功しました。") 37 38for file in files: 39 # tsv (tab-separated values) 40 df = pd.read_csv(file, skiprows=18, usecols=[0,1], header=0) #(chによってcolsを変える) 41 #df = pd.read_csv(file) 42 df.columns = ['Time(s)', 'Ch1 V'] 43 #df["Ch1 V"] = - df["Ch1 V"] 44 Int_min = df['Ch1 V'].max() 45 if Int_min > 0: 46 df['Ch1 V'] = df['Ch1 V'] - Int_min 47 Int_max = df['Ch1 V'].min() 48 Int_max_time = df.loc[df['Ch1 V'] == Int_max,'Time(s)'].values[-1] 49 Int_max_filename = Decimal(str(-Int_max)).quantize(Decimal('0'), rounding=ROUND_HALF_UP) 50 if Int_max_filename < 0: 51 continue 52 df['Time(s)'] = (df['Time(s)'] - Int_max_time) * Time_scale 53 if normarized: 54 df['Ch1 V'] = - df['Ch1 V'] * 1000 55 else: 56 df['Ch1 V'] = - df['Ch1 V'] 57 #df['Ch1 V'] = (df['Ch1 V'] / Int_max)*1000 58 59 fig = plt.figure(figsize=(85/25.4, 85/25.4/2), dpi=128) 60 #plt.scatter(df['Time(s)'], df['Ch1 V'], s=0.4, alpha=0.6, label=Int_max_filename) 61 plt.plot(df['Time(s)'], df['Ch1 V'], lw=1.0) 62 #plt.legend(loc="best") 63 plt.title(file[-30:], fontsize=8) 64 plt.yscale("log") 65 plt.savefig((f'{file}-thum.png'), bbox_inches="tight") 66 plt.show() 67 68 df = df[['Time(s)', 'Ch1 V']] 69 df = df.rename(columns={'Ch1 V': 'Int'}) 70 df.to_csv(f'{file}-drop-header-{Int_max_filename}.txt', index=False, sep="\t") 71 72print("end") 73 74
試したこと
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'))を削除した。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/26 11:51