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

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

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

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

Python 3.x

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

Q&A

1回答

1596閲覧

pyinstallerでのpickleファイルの取り扱いについて

aoimusic

総合スコア0

PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

Python 3.x

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

0グッド

0クリップ

投稿2022/04/02 12:34

pyinstallerについて質問です。pickleファイルも含めて実行ファイルを作りたいです。
以下のようなスクリプトをpythonで作りました。環境はM1MacOSです。

script.pyの概要
1. pickleファイルからリストを読み込み、変数listに格納
2. listを検索できる
3. listに情報を追加できる
4. listの情報を削除できる
5. 最後にlistをpickleファイルに保存する

つまりscript.py(本体) とlist.pickle(データ保存用)の2つのファイルで情報を検索したり、新しい情報を追加したり、削除したりできるものです。
またpysimpleguiでGUI化しています。

これをpyinstallerで一つの実行ファイルにまとめたいのですが、どうすればよいかわかりません。普通にpyinstaller script.py --onefile --noconsole で実行してもうまくいきません。完成した実行ファイルを開いても、動きません。pickleファイルを読み込む部分でエラーが起きているようです。script.pyのコードには、カレントディレクトリにあるlist.pickleファイルを読み込むように書いてあります。そのため、試しに同じフォルダの中に完成した実行ファイルとpickleファイルをおいてみても起動すらしません。

このscript.pyとlist.pickleをpyinstallerで1つにまとめることはできるのか。または、実行ファイルとpickleファイルでうまく動作させるにはどうすればよいか。 詳しい方、どうかご回答よろしくお願いします。

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

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

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

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

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

guest

回答1

0

pyinstallerコマンドのadd-dataオプションを使えばできるでしょう。 使いかたは検索してみてください。

ただ、そのような用途であれば、DBを使ったほうがよいのではないかと思います。 DBであれば、そもそも書き換えなどを想定した仕組みになっているので、Pickleのように読み書きのタイミングを気にする必要もありません。SQLiteならそれほど面倒な手順もいらないし、同様にDBのファイルを同梱することもできますので。

投稿2022/04/02 15:00

TakaiY

総合スコア12765

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

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

aoimusic

2022/04/03 03:13 編集

ご回答ありがとうございます。初心者のため、恥ずかしながらDBという言葉は聞いたことがあるものの、こういう場面で使うものとはまったく知りませんでした。ゲームでいうと、プログラム本体がゲームのディスク、セーブデータがpickleというふうに理解していました。が、セーブデータはDBのほうが良いということですね。参考にします。 とはいえ、今回は、pickleファイルでいったん作れたらなと考えています。 ご回答頂いた、add−dataなのですが、何度か試してみたもののエラーが発生してしまいます。エラー文を見ると、pickleファイルを読み込む部分の行が表示されています。pickle ファイル自体バイナリデータのため、add-binaryというコマンドを試してみても同じ結果です。自分なりに調べてみると--onefileを指定すると、パスの指定を書き換えなければならないらしく、一旦、--onefileのオプションを外してみました。するとdistフォルダにscriptというフォルダができ、そのなかにadd-binaryで指定したlist.pickleと実行ファイル化したscrptというexecのアイコンのファイル、その他もろもろがはいっていました。execファイルを実行するとやはり同じようにエラー文が出ます。pickleファイルを読み込めていないようです。完全に打つ手なしです。ご指南いただけると幸いです。
TakaiY

2022/04/03 07:36

質問を修正して、onefile の時に出るエラーの情報を加えてください。エラーになりますだけでは何もアドバイスできません。 エラーのメッセージにはエラーの原因の情報が入っているので、それを見ないと何がいけないのかわかりません
aoimusic

2022/04/03 09:24

Traceback (most recent call last): File "script.py", line 93, in <module> EOFError: Ran out of input [実行のたびに変わる5桁の数字] Failed to execute script 'script' due to unhandled exception! 上記のようなエラーです。ちなみにscript.py93行目付近は以下のようになっています。 92行目 with open('./list.pickle','rb') as f: 93行目   list = pickle.load(f) ちなみにadd-dataコマンドでもadd-binaryコマンドでもエラー文はすべて一緒です。 onefileをつけても外しても、出てくるエラー文は、ほぼ一緒です。 よろしくお願いいたします。
TakaiY

2022/04/03 13:21

Ran aut of input ということは、ファイルが無いわけではなさそうなので、そのファイルが壊れているか、空なのでしょう。 そのコードがどんな段階でのものなのかわからないので、原因はわかりません。
aoimusic

2022/04/04 12:12

ご回答ありがとうございます。もう少し検証をしてみようと思います。またアドバイスいただきました、DBについても勉強してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問