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

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

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

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

Q&A

0回答

834閲覧

py2exeでのexe化について

skye

総合スコア1

Python

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

0グッド

0クリップ

投稿2022/03/14 08:09

pythonについての質問です。
pythonの開発環境のインストールされていないWindows PCに向けてのexe化が上手く出来ません。具体的には以下の画像のようなエラーが出るみたいです。exe化にはpy2exeを使用しています。

イメージ説明
また、exeファイルが問題なく動くかどうかを自分で確認したいのですが、自分のlaptopにはpythonの実行環境が既にインストールされているのでpythonの入っていない PCでの動作確認の方法があれば教えていただきたいです。

最後にソースコードとsetupファイルを載せておきます。
↓ソースコード

python

1import csv 2import pandas 3from tkinter import filedialog 4 5def excel_to_csv_and_return_data_for_giftee(filename): 6 filename = filename.strip("'") 7 csv_name = filename.strip(".xlsx")+"_1.csv" 8 df = pandas.read_excel(filename, sheet_name=0) 9 df.to_csv(csv_name, index=False) 10 11 with open(csv_name, 'rt', newline='',encoding="utf-8") as csvfile: 12 reader = csv.reader(csvfile) 13 data = [row for row in reader] 14 15 new_data=[] 16 for row in data: 17 new_row = [col.replace(",","") for col in row] 18 new_row = [col.replace(" ","") for col in new_row] 19 new_row=str(",".join(new_row)) 20 if "0." in new_row: 21 new_row = new_row.split(",") 22 new_data.append(new_row) 23 new_data = new_data[1:] 24 25 return new_data 26 27def excel_to_csv_and_return_data_for_biz(filename): 28 filename = filename.strip("'") 29 csv_name = filename.strip(".xlsx")+"_1.csv" 30 df = pandas.read_excel(filename, sheet_name=0) 31 df.to_csv(csv_name, index=False) 32 33 with open(csv_name, 'rt', newline='',encoding="utf-8") as csvfile: 34 reader = csv.reader(csvfile) 35 data = [row for row in reader] 36 37 new_data=[] 38 for row in data: 39 new_row = [col.replace(",","") for col in row] 40 new_row = [col.replace(" ","") for col in new_row] 41 new_row=str(",".join(new_row)) 42 new_row = new_row.split(",") 43 new_data.append(new_row) 44 new_data = new_data[1:] 45 46 return new_data 47 48 49#それぞれのシートの整理/main関数内でfor文を使ってselfに数字を入れる 50def fixx(self, new_data, csv_names): 51 with open(csv_names[self], 'rt', newline='',encoding="utf-8") as csvfile: 52 reader = csv.reader(csvfile) 53 data = [row for row in reader] 54 55 if not len(data)==1: 56 title = data[0][0].split("\u3000") 57 title = title[0] 58 data = [d[1:] for d in data[1:]] 59 num=0 60 for row in data: 61 if '1.0' in row: 62 num = row.index("1.0") 63 elif "1" in row: 64 num = row.index("1") 65 break 66 67 if not num==0: 68 for row in data: 69 if not row[num+1]=="": 70 new_row = [col.replace(",","") for col in row] 71 new_row = [col.replace(" ","") for col in new_row] 72 new_row = [col.replace(".0","") for col in new_row] 73 new_row = [col.replace("\u3000","") for col in new_row] 74 new_row = str(",".join(new_row)) 75 new_row = new_row.split(",") 76 new_row[num+1] = title + ":" + new_row[num+1] 77 new_data.append(new_row[num+1:num+3]) 78 return new_data 79 80 81def excel_into_csv(excel_name_before): 82 filename = excel_name_before.strip("'") 83 csv_names = [] 84 df = pandas.read_excel(filename, sheet_name=None) 85 for i in range(len(df.keys())): 86 csv_names.append(filename.strip(".xlsx") + "_" + str(i) + ".csv") 87 df = pandas.read_excel(filename, sheet_name=i) 88 df.to_csv(csv_names[i], index=False) 89 90 new_data = [] 91 for i in range(len(csv_names)): 92 fixx(i, new_data, csv_names) 93 94 filename = filename[filename.index("年")-4:filename.index("月")+1] + ".csv" #名前を調整 95 f = open(filename,"w",encoding="utf-8") 96 for i in new_data: #整理したデータをcsv形式で出力/fix_sheetはシート別のデータしか保存していないから一度まとめる 97 if i[1].isdecimal(): 98 f.write(i[0]+","+i[1]) 99 f.write("\n") 100 f.close() 101 return new_data 102 103 104def toppan(excel_name_before): 105 filename = excel_name_before.strip("'") 106 107 filename = filename.strip("'") 108 csv_name = filename.strip(".xlsx")+"_1.csv" 109 df = pandas.read_excel(filename, sheet_name=0) 110 df.to_csv(csv_name, index=False) 111 112 with open(csv_name, 'rt', newline='',encoding="utf-8") as csvfile: 113 reader = csv.reader(csvfile) 114 data = [row for row in reader] 115 116 new_data=[] 117 f = open(csv_name,"w",encoding="utf-8") 118 for row in data: 119 if row[0].isdecimal(): 120 row[4] = str(row[1] + ":" + row[4]) 121 new_row = [col.replace(",","") for col in row] 122 new_row = [col.replace(" ","") for col in new_row] 123 new_row = [col.replace("\n","") for col in new_row] 124 new_row =str(",".join(new_row[4:6])) 125 f.write(new_row) 126 f.write("\n") 127 f.close() 128 f = open(csv_name,"r",encoding="utf-8") 129 for i in f: 130 new_data.append(i.split(",")) 131 f.close() 132 return new_data 133 134 135def title(data): 136 title = [] 137 for i in data: 138 title.append(i[0]) 139 return title 140 141def price(data): 142 price = [] 143 for i in data: 144 price.append(i[:2]) 145 return price 146 147def compare(): 148 type = [('excelファイル','*.xlsx')] # 読み取るファイルをxlsxに絞り込む。 149 path = 'C:' # ファイルを検索するパス(Cドライブ直下)を指定する。 150 excel_name_before = filedialog.askopenfilename(filetypes = type, initialdir = path) # これがダイアログ(GUI)本体と思われる。 151 excel_name_after = filedialog.askopenfilename(filetypes = type, initialdir = path) # これがダイアログ(GUI)本体と思われる。 152 153 if "*****" in excel_name_before and "****" in excel_name_after: 154 data_before = excel_to_csv_and_return_data_for_giftee(excel_name_before) 155 data_after = excel_to_csv_and_return_data_for_giftee(excel_name_after) 156 157 elif "*****" in excel_name_before and "****" in excel_name_after: 158 data_before = excel_to_csv_and_return_data_for_biz(excel_name_before) 159 data_after = excel_to_csv_and_return_data_for_biz(excel_name_after) 160 161 elif "***" in excel_name_before and "***" in excel_name_after: 162 data_before = excel_into_csv_711(excel_name_before) 163 data_after = excel_into_csv_711(excel_name_after) 164 165 elif "-------" in excel_name_before and "******" in excel_name_after: 166 data_before = toppan(excel_name_before) 167 data_after = toppan(excel_name_after) 168 169 else: 170 print("比較する取引先が違うかファイル形式が無効です") 171 return "invalid" 172 173 174 title_before = title(data_before) 175 title_after = title(data_after) 176 price_before = price(data_before) 177 price_after = price(data_after) 178 179 flag = 0 180 filename = input("保存するファイル名を入力してください:") 181 f = open(filename + ".csv","w",encoding="utf-8") 182 183 print("______deleted______") 184 f.write("__deleted__\n") 185 for i in title_before: 186 if not i in title_after: 187 print(i,"is deleted") 188 f.write(i.replace(":",",")) 189 f.write("\n") 190 flag += 1 191 if flag==0: 192 print("nothing") 193 194 print() 195 print("______added______") 196 f.write("__added__\n") 197 198 flag = 0 199 for i in title_after: 200 if not i in title_before: 201 print(i,"is added") 202 f.write(i.replace(":",",")) 203 f.write("\n") 204 205 flag += 1 206 if flag==0: 207 print("nothing") 208 209 210 print() 211 print("______price_changed______") 212 f.write("__price_changed__,,変更前,変更後\n") 213 214 flag = 0 215 for i in price_before: 216 for j in price_after: 217 if j[0]==i[0] and j[1]!=i[1]: 218 print(j[0]," :",i[1],"->",j[1]) 219 strr = j[0].replace(":",",") + "," + i[1].replace("\n","") + "," + j[1].replace("\n","") + "\n" 220 f.write(strr) 221 flag += 1 222 if flag==0: 223 print("nothing") 224 f.close() 225 226 227 print("The number of lineup: ",len(data_before),"->",len(data_after)) 228 229 230#compareを呼び出すことで処理を実行。 231if __name__=="__main__": 232 print("古いファイル->新しいファイルの順番に選択してください") 233 compare()

↓setupファイル

python

1from distutils.core import setup 2import py2exe 3 4includes = ["csv","pandas","tkinter"] 5excludes = ['_gtkagg', '_tkagg', 'curses', 'pywin.debugger', 'pywin.debugger.dbgcon', 'pywin.dialogs' ] 6packages = [] 7dll_excludes = [] 8 9setup( 10 options={"py2exe":{"compressed": 0, 11 "optimize": 0, 12 "includes": includes, 13 "excludes": excludes, 14 "packages": packages, 15 "dll_excludes": dll_excludes, 16 "bundle_files": 1, 17 "dist_dir": ".", 18 "xref": False, 19 "skip_archive": False, 20 "ascii": False, 21 "custom_boot_script": '', 22 } 23 }, 24 console=['compare_last.py'])

setupファイルに関してはネット上に乗っているものを見よう見まねでいじっただけなので内容についてはあまり理解できていません。
ソースコードは自分のパソコンでは問題なく動きます。
exe化するのは初めてなので全て手探りの状態です。
よろしければ回答のほどお願いいたします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問