🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PyInstaller

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

Python 3.x

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

Python

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

Q&A

解決済

2回答

4616閲覧

pyファイルで実行できるコードがexe化すると動かなくなる

per_

総合スコア41

PyInstaller

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

Python 3.x

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

Python

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

0グッド

1クリップ

投稿2021/03/01 06:59

前提・実現したいこと

画像ファイルをPDFに変換する処理をPythonで行い、そのプログラムをexe化したいと考えています。
モジュールはPyInstallerを採用しています。(py2exeではうまくいかなかったため)

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

  • 通常のPython環境でコードを実行する際にはエラーにならずにPDFが出力される

(各画像のPDFと、結合された test.pdf が出力される)

  • PyInstallerで生成したexeファイルから実行すると途中でクラッシュする

 → こちらのサイトを参考に--debug all の引数で生成したexeファイルで実行してみていますがログの出力中にコンソールが落ちます

exe ファイルでは、以下のimg2pdf.convert行の直前まで実行されていることを確認しています。
そのため、img2pdfモジュールがインポートされていない、という可能性も少ないと考えています。

Python

1layout_pdf = img2pdf.get_layout_fun((img2pdf.mm_to_pt(210), img2pdf.mm_to_pt(297))) 2# ここまでは実行されている 3cov_pdf = img2pdf.convert(i,layout_fun=layout_pdf)

pyファイルの実行ではエラーなく実行されるため、exe化に問題があると思いますが、理由が思い当たらず、知恵をお借りできればと思った次第です。

該当のソースコード

こちらのサイトのコードを拝借しています。

Python

1 2#!python3.7 3 4import os 5from PIL import Image 6import img2pdf 7import PyPDF2 8 9path = r"C:\Users\USERNAME\Desktop\img2PDF\im" 10pdf_path = r"C:\Users\USERNAME\Desktop\img2PDF\pdf" 11os.chdir(path) 12 13#画像を読み込み、pdfファイルに変換 14n = 0 15for i in os.listdir(path): 16 #pdfファイル(各ページ)の保存名を指定 17 pdf_name = pdf_path + "\" + str(n) + ".pdf" 18 19 #Pillowモジュールを使用し画像の読み込み 20 img = Image.open(i) 21 22 #画像→pdfファイルに変換 23 layout_pdf = img2pdf.get_layout_fun((img2pdf.mm_to_pt(210), img2pdf.mm_to_pt(297))) 24 cov_pdf = img2pdf.convert(i,layout_fun=layout_pdf) 25 26 #pdfファイルを読み込み(pdf_nameで指定したpdfがない場合、pdf_nameをファイル名として新規にpdfファイルを作成) 27 file = open(pdf_name, "wb") 28 #pdfファイルを書き込み 29 file.write(cov_pdf) 30 n += 1 31 #開いているファイルを閉じる 32 img.close() 33 file.close() 34 35#複数のpdfファイルを結合する 36merge = PyPDF2.PdfFileMerger() 37for j in os.listdir(pdf_path): 38 merge.append(pdf_path + "\" + j) 39 40merge.write(pdf_path + "\" + "test.pdf") 41merge.close() 42 43print("変換終了") 44

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

Windows 10
Python 3.7
VS code

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

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

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

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

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

per_

2021/03/01 08:40

浅学でした。ありがとうございます。
guest

回答2

0

自己解決

参考にしたサイト:【Python】PyInstallerでPandasを利用するとエラーが出る話【ちょいネタ】
こちらのサイトの方のように--debug all の引数で生成したexeファイルを実行し、処理中のコンソール画面をキャプチャし、エラーメッセージを探ることができました。
pikepdf._cpphelpersが無いというメッセージだったため、specファイルに
hiddenimports=['pikepdf._cpphelpers']
を記載することで解決しました。

投稿2021/03/05 07:53

per_

総合スコア41

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

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

0

自分が思いつく原因は以下の2点になります。見当外れだったら申し訳ありません。

1.)外部リソースの指定不足による不具合
PyInstallerで作成したファイルを実行する場合、リソースは別フォルダに展開されます。そのため、コードを書くときにはそこを参照するようにひと手間加えた上で、さらに作成されたSPECファイルを編集する必要があります。以下のリンクをご参照下さい。こちらについては"PyInstaller 外部リソース"などで検索すると、更に情報が出てきます。
PyInstallerで実行ファイルにリソースを埋め込み

2.)実行環境による不具合
インストールの際にcondaを使ってインストールしていると、作成した実行ファイルが数百MBというありえないサイズに膨らむことがあります。Anacondaを利用しているのであれば、仮想環境を作成し直した上で、改めてパッケージをインストールし直すと上手くいく場合があります。こちらは以下のリンクをご参照下さい。
【悲報】PyInstallerさん、300MBのexeファイルを吐き出すようになる

何かの参考になれば幸いです。

投稿2021/03/02 04:58

kensoon

総合スコア48

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

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

per_

2021/03/03 09:36 編集

ご回答ありがとうございます。 1.)外部リソースの指定不足による不具合  スクリプト内で使用している画像ファイルは絶対パスで指定をしているため、外部リソースという点で見ると本件の原因ではないような気がしました。 2.)実行環境による不具合  当方、pip環境でした。 2つともリンク先のページは勉強になりました。 ページの内容ももう少し読み込んでみようと思います、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問