teratail header banner
teratail header banner
質問するログイン新規登録
Python

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

Q&A

1回答

795閲覧

python pikepdf 実行ファイル化で動作しない

kapibara-san

総合スコア0

Python

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

0グッド

0クリップ

投稿2023/06/24 08:47

編集2023/06/24 10:29

0

0

実現したいこと

pythonでpdfファイルのパスワード解除させる実行ファイルを作りたいです。《初心者》
解除した対象のpdfファイルを実行ファイルにドラック&ドロップするとパスワード解除されたpdfが別途生成される。
pdfのパスワードは予めコードに記載する

前提

OS:windows10 64bit
Python 3.9.5
pikepdf 7.2.0
pip 23.1.2
コードファイル:pdf.py
実行ファイル作成時のコマンド:pyinstaller pdf.py --onefile

質問内容

pdf.py単体では正常動作しますが、実行ファイル化するとコンソールにメッセージが表示され
パスワード解除されたpdfが生成されません。
実行ファイル化自体はエラー発生なく正常に exeファイルが生成されました。

エラーメッセージ

実行ファイル動作時で、対象のpdfファイルをドラック&ドロップ後、コンソールに下記メッセージが表示されます。
(初心者で下記メッセージの内容を理解するスキルがありません。すみません。)

Traceback (most recent call last):
File "pikepdf_init__.py", line 17, in <module>
File "PyInstaller loader#py i mod02_importers.py", line 385, in exec_module
File "pikepdf_version.py", line 8, in <module>
File "import lib¥metadata.py", line 551, in version
File "import lib¥metadata.py", line 524, in distribution
File "import lib¥metadata.py", line 187, in from_name
import lib.metadata. PackageNotFoundError: pikepdf

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "pdf.py", line 2, in <module>
from pikepdf import Pdf
File "PyInstaller loader #py i mod02_importers.py", line 385, in exec_module
File "pikepdf_init__.py", line 19, in <module>
ImportError: Failed to determine version
[26464] Failed to execute script 'pdf' due to unhandled exception!

該当のソースコード

公開されているコードを一部変更しほぼそのまま使用しています。
下記コードファイルにpdfファイルのドラック&ドロップは正常に動作します。

import os, sys
from pikepdf import Pdf

def unlockPdf (filepath):
PSWD = 'abcdefg" #パスワード
pdf file Pdf .open(filepath, password=PSWD)
newPdf = Pdf.new()
newPdf.pages.extend(pdffile.pages)
OUTPUT_DIR= os.path.dirname(filepath)
newPdf.save(OUTPUT_DIR + '/decrypted.pdf')

FILE_PATH = sys.argv[1]
unlockPdf (FILE_PATH)

試したこと

pip、pyinstallerを、pipコマンドでのバージョンアップしましたが現象変わらず。
他サイト様・個人サイト様で同様の実行ファイル化後に動作しない現象があり、それぞれ解決策が記載されていましたが、本件のコンソール表示のメッセージと同内容が無く挫折しこちらで質問させて頂きました。

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

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

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

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

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

guest

回答1

0

この回答はGPT-4による自動生成回答です

実行ファイル化した際に、pikepdfが正しくインポートされていないことが原因のようです。PyInstallerで実行ファイルを作成する際に、pikepdfを正しくインポートするための設定を追加する必要があります。

まず、カレントディレクトリにhook-pikepdf.pyという名前のファイルを作成し、以下の内容を記述してください。

python

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

次に、pyinstallerコマンドを実行する際に、--additional-hooks-dirオプションを追加して、作成したhook-pikepdf.pyがあるディレクトリを指定してください。

pyinstaller pdf.py --onefile --additional-hooks-dir .

これで、実行ファイル化した際にpikepdfが正しくインポートされるはずです。再度実行ファイルを作成して、動作を確認してみてください。

投稿2023/06/24 08:48

teratail-ai

Powered by GPT-4

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

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

kapibara-san

2023/06/24 10:30 編集

回答ありがとうございます。 早速試しましたが、同様の現象で解決に至らずです。 やり方に問題があるかもしれませんので、実施内容を記載いたします。 1.「hook-pikepdf.py」ファイルを作成、   下記記載し、カレントディレクトリ(デスクトップ)に保存しました。   from PyInstaller.utils.hooks import collect_data_files   datas = collect_data_files('pikepdf') 2.実行ファイルコマンド(全てのファイルをデスクトップにおいてます)   pyinstaller pdf.py --onefile --additional-hooks-dir ./Users/***/Desktop 結果:実行ファイルは生成されたが同現象でコンソールが一瞬表示されるがすぐ消えて パスワード解除されたpdfは生成されない。 一瞬コンソールに表示される内容は同様の内容でした。 尚、「pdf.py」へ直接pdfドラック&ドロップはパスワード解除されたファイルは正常に生成されます。 別途対応方法探してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問