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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

2582閲覧

pyinstallerでPython-pptxをexe化しても実行できない

y.sato

総合スコア10

PyInstaller

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

Python 3.x

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

0グッド

0クリップ

投稿2022/02/14 12:02

やりたいこと

pythonを使用してpowerpointを作った上で、そのソフトを他人へ配布したいと考えております。

概要

ただPython-pptxを使用したpyファイルをpyinstallerを使ってexe化を試みましたが、
exe化の処理自体にエラーが出ていないものの、出来上がったソフトを実行してもpython-pptxが
動いていない様です。

pythonに触ってまだ日が浅く、独学で勉強しているため知識に偏りがありプログラムを組む上での
常識や単語自体に対しても知識がないのは承知の上ですが、自分なりに出来る事・調べられる事は
やってみたのですが、このトラブルを解決することが出来ませんでした。

状況や試したことを下記にまとめますので誤り・不足・勘違い等あれば指摘頂けると幸いです。
よろしくお願いします。

状況詳細

以下コードはpowerpoint作成用のテストコード

pptx_try.py

1from pptx import Presentation 2from pptx.util import Cm 3 4prs = Presentation() 5prs.slide_width = Cm(33.867) 6prs.slide_height = Cm(19.05) 7 8slide_layout = prs.slide_layouts[5] 9slide0 = prs.slides.add_slide(slide_layout) 10 11title0 = slide0.placeholders[0] 12title0.text= "test_try" 13pg = title0.text_frame.paragraphs[0] 14run1 = pg.runs[0] 15 16pp_name="try.pptx" 17prs.save(pp_name)

このコードをexe化するためコマンドプロンプト(本pyファイルがおいてあるフォルダに「cmd」を入力)を開き、下記コードを入力し実行。

pyinstaller pptx_try.py --onefile

処理はエラーが出ている雰囲気なく完了しコマンドプロンプトの最終行に「39861 INFO: Building EXE from EXE-00.toc completed successfully.」が表示される。
これで出来たフォルダの「dist」の中にあるファイル「pptx_try」を実行するが以下エラーが出てしまう。
自分で調べた限りだと「python-pptx」をexe化する際に一緒に処理してくれていないのが問題と考えた。

errer

1Traceback (most recent call last): 2 File "inst_main.py", line 10, in <module> 3 File "inst_pptx.py", line 7, in pptx 4 File "pptx\api.py", line 28, in Presentation 5 File "pptx\opc\package.py", line 73, in open 6 File "pptx\opc\package.py", line 157, in _load 7 File "pptx\opc\package.py", line 186, in load 8 File "pptx\opc\package.py", line 190, in _load 9 File "pptx\util.py", line 215, in __get__ 10 File "pptx\opc\package.py", line 219, in _parts 11 File "pptx\util.py", line 215, in __get__ 12 File "pptx\opc\package.py", line 203, in _content_types 13 File "pptx\opc\serialized.py", line 35, in __getitem__ 14 File "pptx\util.py", line 215, in __get__ 15 File "pptx\opc\serialized.py", line 49, in _blob_reader 16 File "pptx\opc\serialized.py", line 135, in factory 17pptx.exc.PackageNotFoundError: Package not found at 'C:\Users\Y89D5~1.SAT\AppData\Local\Temp\_MEI114962\pptx\templates\default.pptx' 18[14356] Failed to execute script 'pptx_try' due to unhandled exception!

※本エラーメッセージはログ画面が消えるのが早すぎてコピーを取れないためたまたま取れた違うexe化ファイルのログです。内容は殆ど一緒でかつ最後の2行のエラーメッセージは今回のpptx_try.pyと同じ内容であることは確認してます。

試したこと

①pythonのバージョアップ

②各installerのバージョンアップ

③exe化時にhidden importを使ってpptx関係のライブラリを読み込ませる

pyinstaller pptx_try.py --onefile --hidden-import "pptx,pptx.util"

参考サイト
https://timesaving.hatenablog.com/entry/2021/03/09/160000#%E5%90%8C%E6%A2%B1%E3%81%99%E3%82%8B%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E6%8C%87%E5%AE%9A--hidden-import

④exe化時にhookファイル?を追加する
hookファイル?を作り、exe化
pptx_try.pyと同じディレクトリに「hooks」フォルダを作りその中に下記「hook」ファイルを入れました。

hook.py

1from PyInstaller.utils.hooks import collect_data_files 2datas= collect_data_files('pptx')

exe化に使用したのは以下のコード

pyinstaller pptx_try.py --onefile --additional-hooks-dir=./hooks

参考サイト
https://teratail.com/questions/184343

以上 乱文で申し訳ございませんがご回答の程、よろしくお願いします

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

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

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

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

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

guest

回答1

0

自己解決

pyinstallerではなくcx-freezeでのexe化を試したところ問題なく動かせました。
ただpyinstallerでのexe化自体はわからずじまいのため、もしわかる方がいらっしゃいましたら
ご教示頂きたくよろしくお願いします。

<参考URL>
https://www.lisz-works.com/entry/python-cx-freeze
https://tomomai.com/python_cx_freeze/

投稿2022/02/16 08:57

y.sato

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問