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

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

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

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

受付中

py2exeでのexe化について

skye
skye

総合スコア1

Python

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

0回答

0評価

0クリップ

313閲覧

投稿2022/03/14 08:09

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

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

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

python

import csv import pandas from tkinter import filedialog def excel_to_csv_and_return_data_for_giftee(filename): filename = filename.strip("'") csv_name = filename.strip(".xlsx")+"_1.csv" df = pandas.read_excel(filename, sheet_name=0) df.to_csv(csv_name, index=False) with open(csv_name, 'rt', newline='',encoding="utf-8") as csvfile: reader = csv.reader(csvfile) data = [row for row in reader] new_data=[] for row in data: new_row = [col.replace(",","") for col in row] new_row = [col.replace(" ","") for col in new_row] new_row=str(",".join(new_row)) if "0." in new_row: new_row = new_row.split(",") new_data.append(new_row) new_data = new_data[1:] return new_data def excel_to_csv_and_return_data_for_biz(filename): filename = filename.strip("'") csv_name = filename.strip(".xlsx")+"_1.csv" df = pandas.read_excel(filename, sheet_name=0) df.to_csv(csv_name, index=False) with open(csv_name, 'rt', newline='',encoding="utf-8") as csvfile: reader = csv.reader(csvfile) data = [row for row in reader] new_data=[] for row in data: new_row = [col.replace(",","") for col in row] new_row = [col.replace(" ","") for col in new_row] new_row=str(",".join(new_row)) new_row = new_row.split(",") new_data.append(new_row) new_data = new_data[1:] return new_data #それぞれのシートの整理/main関数内でfor文を使ってselfに数字を入れる def fixx(self, new_data, csv_names): with open(csv_names[self], 'rt', newline='',encoding="utf-8") as csvfile: reader = csv.reader(csvfile) data = [row for row in reader] if not len(data)==1: title = data[0][0].split("\u3000") title = title[0] data = [d[1:] for d in data[1:]] num=0 for row in data: if '1.0' in row: num = row.index("1.0") elif "1" in row: num = row.index("1") break if not num==0: for row in data: if not row[num+1]=="": new_row = [col.replace(",","") for col in row] new_row = [col.replace(" ","") for col in new_row] new_row = [col.replace(".0","") for col in new_row] new_row = [col.replace("\u3000","") for col in new_row] new_row = str(",".join(new_row)) new_row = new_row.split(",") new_row[num+1] = title + ":" + new_row[num+1] new_data.append(new_row[num+1:num+3]) return new_data def excel_into_csv(excel_name_before): filename = excel_name_before.strip("'") csv_names = [] df = pandas.read_excel(filename, sheet_name=None) for i in range(len(df.keys())): csv_names.append(filename.strip(".xlsx") + "_" + str(i) + ".csv") df = pandas.read_excel(filename, sheet_name=i) df.to_csv(csv_names[i], index=False) new_data = [] for i in range(len(csv_names)): fixx(i, new_data, csv_names) filename = filename[filename.index("年")-4:filename.index("月")+1] + ".csv" #名前を調整 f = open(filename,"w",encoding="utf-8") for i in new_data: #整理したデータをcsv形式で出力/fix_sheetはシート別のデータしか保存していないから一度まとめる if i[1].isdecimal(): f.write(i[0]+","+i[1]) f.write("\n") f.close() return new_data def toppan(excel_name_before): filename = excel_name_before.strip("'") filename = filename.strip("'") csv_name = filename.strip(".xlsx")+"_1.csv" df = pandas.read_excel(filename, sheet_name=0) df.to_csv(csv_name, index=False) with open(csv_name, 'rt', newline='',encoding="utf-8") as csvfile: reader = csv.reader(csvfile) data = [row for row in reader] new_data=[] f = open(csv_name,"w",encoding="utf-8") for row in data: if row[0].isdecimal(): row[4] = str(row[1] + ":" + row[4]) new_row = [col.replace(",","") for col in row] new_row = [col.replace(" ","") for col in new_row] new_row = [col.replace("\n","") for col in new_row] new_row =str(",".join(new_row[4:6])) f.write(new_row) f.write("\n") f.close() f = open(csv_name,"r",encoding="utf-8") for i in f: new_data.append(i.split(",")) f.close() return new_data def title(data): title = [] for i in data: title.append(i[0]) return title def price(data): price = [] for i in data: price.append(i[:2]) return price def compare(): type = [('excelファイル','*.xlsx')] # 読み取るファイルをxlsxに絞り込む。 path = 'C:' # ファイルを検索するパス(Cドライブ直下)を指定する。 excel_name_before = filedialog.askopenfilename(filetypes = type, initialdir = path) # これがダイアログ(GUI)本体と思われる。 excel_name_after = filedialog.askopenfilename(filetypes = type, initialdir = path) # これがダイアログ(GUI)本体と思われる。 if "*****" in excel_name_before and "****" in excel_name_after: data_before = excel_to_csv_and_return_data_for_giftee(excel_name_before) data_after = excel_to_csv_and_return_data_for_giftee(excel_name_after) elif "*****" in excel_name_before and "****" in excel_name_after: data_before = excel_to_csv_and_return_data_for_biz(excel_name_before) data_after = excel_to_csv_and_return_data_for_biz(excel_name_after) elif "***" in excel_name_before and "***" in excel_name_after: data_before = excel_into_csv_711(excel_name_before) data_after = excel_into_csv_711(excel_name_after) elif "-------" in excel_name_before and "******" in excel_name_after: data_before = toppan(excel_name_before) data_after = toppan(excel_name_after) else: print("比較する取引先が違うかファイル形式が無効です") return "invalid" title_before = title(data_before) title_after = title(data_after) price_before = price(data_before) price_after = price(data_after) flag = 0 filename = input("保存するファイル名を入力してください:") f = open(filename + ".csv","w",encoding="utf-8") print("______deleted______") f.write("__deleted__\n") for i in title_before: if not i in title_after: print(i,"is deleted") f.write(i.replace(":",",")) f.write("\n") flag += 1 if flag==0: print("nothing") print() print("______added______") f.write("__added__\n") flag = 0 for i in title_after: if not i in title_before: print(i,"is added") f.write(i.replace(":",",")) f.write("\n") flag += 1 if flag==0: print("nothing") print() print("______price_changed______") f.write("__price_changed__,,変更前,変更後\n") flag = 0 for i in price_before: for j in price_after: if j[0]==i[0] and j[1]!=i[1]: print(j[0]," :",i[1],"->",j[1]) strr = j[0].replace(":",",") + "," + i[1].replace("\n","") + "," + j[1].replace("\n","") + "\n" f.write(strr) flag += 1 if flag==0: print("nothing") f.close() print("The number of lineup: ",len(data_before),"->",len(data_after)) #compareを呼び出すことで処理を実行。 if __name__=="__main__": print("古いファイル->新しいファイルの順番に選択してください") compare()

↓setupファイル

python

from distutils.core import setup import py2exe includes = ["csv","pandas","tkinter"] excludes = ['_gtkagg', '_tkagg', 'curses', 'pywin.debugger', 'pywin.debugger.dbgcon', 'pywin.dialogs' ] packages = [] dll_excludes = [] setup( options={"py2exe":{"compressed": 0, "optimize": 0, "includes": includes, "excludes": excludes, "packages": packages, "dll_excludes": dll_excludes, "bundle_files": 1, "dist_dir": ".", "xref": False, "skip_archive": False, "ascii": False, "custom_boot_script": '', } }, console=['compare_last.py'])

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

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Python

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