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

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

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

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

Python 3.x

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

解決済

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

y.sato
y.sato

総合スコア10

PyInstaller

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

Python 3.x

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

1回答

0評価

0クリップ

558閲覧

投稿2022/02/14 12:02

やりたいこと

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

概要

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

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

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

状況詳細

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

pptx_try.py

from pptx import Presentation from pptx.util import Cm prs = Presentation() prs.slide_width = Cm(33.867) prs.slide_height = Cm(19.05) slide_layout = prs.slide_layouts[5] slide0 = prs.slides.add_slide(slide_layout) title0 = slide0.placeholders[0] title0.text= "test_try" pg = title0.text_frame.paragraphs[0] run1 = pg.runs[0] pp_name="try.pptx" prs.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

Traceback (most recent call last): File "inst_main.py", line 10, in <module> File "inst_pptx.py", line 7, in pptx File "pptx\api.py", line 28, in Presentation File "pptx\opc\package.py", line 73, in open File "pptx\opc\package.py", line 157, in _load File "pptx\opc\package.py", line 186, in load File "pptx\opc\package.py", line 190, in _load File "pptx\util.py", line 215, in __get__ File "pptx\opc\package.py", line 219, in _parts File "pptx\util.py", line 215, in __get__ File "pptx\opc\package.py", line 203, in _content_types File "pptx\opc\serialized.py", line 35, in __getitem__ File "pptx\util.py", line 215, in __get__ File "pptx\opc\serialized.py", line 49, in _blob_reader File "pptx\opc\serialized.py", line 135, in factory pptx.exc.PackageNotFoundError: Package not found at 'C:\Users\Y89D5~1.SAT\AppData\Local\Temp\_MEI114962\pptx\templates\default.pptx' [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

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

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

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

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

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

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

PyInstaller

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

Python 3.x

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