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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

12004閲覧

python3のpyinstallerを使用したexe化について

shikasama

総合スコア163

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2018/09/26 03:11

編集2018/09/27 01:28

前提・実現したいこと

pyinstallerを用いて、pythonプログラムをexe化しようとしています。
しかし、以下に示すエラーが発生します。

発生している問題・エラーメッセージ

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 128: invalid start byte

詳細

該当のソースコード

wave.py

python

1from scipy.optimize import curve_fit 2import seaborn as sns 3 4import sys 5import pandas as pd 6import numpy as np 7import matplotlib.pyplot as plt 8 9sys.setrecursionlimit(100000) 10filepath = input('please input file path.') 11filename = pd.read_csv(filepath, encoding="SHIFT-JIS") 12listT = [] 13listV = [] 14listT = filename['time'] 15listV = filename['value'] 16 17type = input('please input type.\n1:curve\r2:average') 18if type == '1': 19 res = np.polyfit(listT,listV,10) 20 y2 = np.poly1d(res)(listT) 21 plt.figure(figsize=(20,10)) 22 plt.plot(listT,listV,label='ori') 23 plt.plot(listT,y2,label='curve_fit') 24else: 25 num = 10000 26 b = np.ones(num)/num 27 y2 = np.convolve(listV, b, mode='same') 28 plt.figure(figsize=(20,10)) 29 plt.plot(listT,listV, label='ori') 30 plt.plot(listT,y2, label='ave') 31 32plt.legend() 33plt.show() 34 35input()

wave.spec

python

1# -*- mode: python -*- 2import sys 3sys.setrecursionlimit(100000) 4 5block_cipher = None 6 7 8a = Analysis(['wave.py'], 9 pathex=['C:\Users\user\Downloads\NewFolder'], 10 binaries=[], 11 datas=[], 12 hiddenimports=[], 13 hookspath=[], 14 runtime_hooks=[], 15 excludes=[], 16 win_no_prefer_redirects=False, 17 win_private_assemblies=False, 18 cipher=block_cipher, 19 noarchive=False) 20pyz = PYZ(a.pure, a.zipped_data, 21 cipher=block_cipher) 22exe = EXE(pyz, 23 a.scripts, 24 [], 25 exclude_binaries=True, 26 name='wave', 27 debug=False, 28 bootloader_ignore_signals=False, 29 strip=False, 30 upx=True, 31 console=True ) 32coll = COLLECT(exe, 33 a.binaries, 34 a.zipfiles, 35 a.datas, 36 strip=False, 37 upx=True, 38 name='wave') 39

試したこと

wave.pyとwave.specをサクラエディタで開き、
文字コードセットの指定でUTF-8を選択し、上書き保存しました。
その後また、pyinstallerを試しました。
結果は変わりませんでした。

補足情報(FW/ツールのバージョンなど)

以下はconda listで確認したものです。
anaconda 5.2.0
python 3.6.5

Takey様のご提示いただいたコードで実行した結果

Anaconda Promptのバッファサイズで途切れてしまったので、後半部分のみ。
実行結果

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

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

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

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

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

hayataka2049

2018/09/26 09:28

エラーを省略せず全文掲載してみてください
umyu

2018/09/26 12:15

pyinstallerを使わずにスクリプトをそのまま実行しても同様のエラーメッセージが発生しますか?
shikasama

2018/09/27 01:41

エラーの詳細を追加しました。
shikasama

2018/09/27 01:42

python wave.pyと実行するという意味ならば、エラーは発生しません。
guest

回答1

0

ベストアンサー

SHIFT-JISを指定しているようですが、UTF-8でデコードしています。

python

1from scipy.optimize import curve_fit 2import seaborn as sns 3 4import sys 5import codecs as cd # 追加 6import pandas as pd 7import numpy as np 8import matplotlib.pyplot as plt 9 10sys.setrecursionlimit(100000) 11filepath = input('please input file path.') 12#filename = pd.read_csv(filepath, encoding="SHIFT-JIS", "ignore") # コメントアウト 13with cd.open(filepath, "r", "shift-jis", "ignore") as csv_file: # 追加 14 filename = pd.read_table(csv_file) 15 16listT = [] 17listV = [] 18listT = filename['time'] 19listV = filename['value'] 20 21type = input('please input type.\n1:curve\r2:average') 22if type == '1': 23 res = np.polyfit(listT,listV,10) 24 y2 = np.poly1d(res)(listT) 25 plt.figure(figsize=(20,10)) 26 plt.plot(listT,listV,label='ori') 27 plt.plot(listT,y2,label='curve_fit') 28else: 29 num = 10000 30 b = np.ones(num)/num 31 y2 = np.convolve(listV, b, mode='same') 32 plt.figure(figsize=(20,10)) 33 plt.plot(listT,listV, label='ori') 34 plt.plot(listT,y2, label='ave') 35 36plt.legend() 37plt.show() 38 39input() 40

でどうでしょうか。"ignore"オプションはデコードエラーの部分を無視して読み込みます。

投稿2018/09/26 11:52

編集2018/09/26 12:04
takey

総合スコア312

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

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

shikasama

2018/09/27 01:07

ご提示いただいたようにwave.pyコメントアウト部分と追加部分を編集した後、pyinstaller wave.specを実行しましたが、うまくいきませんでした。 実行結果を追記いたしましたので、ご確認いただけると幸いです。
takey

2018/09/27 01:50

あ、勘違いしていました。pyinstaller wave.specを実行したときのエラーだったのですね(最初からそう書いてある)。 エラーログを拝見したところ、c:\users\user\anaconda3\lib\site-packages\PyInstaller\compat.py でdecodeエラーが発生しています。ライブラリのバグっぽいのでgithub issueを探してみますと、似たような方がいました。 https://github.com/pyinstaller/pyinstaller/issues/3605 issueに載ってるstackoverflowのリンク先を読んでもらえば一応解決策が書いてあります。つまり、 c:\users\user\anaconda3\lib\site-packages\PyInstaller\compat.py の370行目を、 out = out.decode(encoding, errors='ignore') と書き換えることです。 勿論これはライブラリを書き換えるということになります。 issueに挙がっていてopenになっているということはバグなのでしょう。修正されるまでは上の方法でやり過ごすというのはどうでしょうか。
shikasama

2018/09/27 04:32

ご提示いただいた通り、compatt.pyを書き換えることでexe化することができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問