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

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

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

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

Q&A

解決済

3回答

3800閲覧

.pyファイルを.exeファイルに変換した際のエラー

135

総合スコア8

Python

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

0グッド

0クリップ

投稿2020/06/11 11:42

編集2020/06/12 04:23

現在pythonを使いプログラムを書いています。
このプログラムをpythonの実行環境のない友人に上げようと思い、pyinstallerを用いて.pyファイルを.exeファイルに変換しました。
しかし、.exeファイルを実行すると以下のようなエラーが出てきました。

Exception in Tkinter callback Traceback (most recent call last): File "tkinter\__init__.py", line 1705, in __call__ File "scratch_4.py", line 21, in onB2Click ModuleNotFoundError: No module named 'pikepdf._cpphelpers'

後述する.exeに変換する前のプログラムではエラーもなく実行できたのですが.exeに変換すると上記のエラーが出てきました。
エラーメッセージから判断するに、もしかしたらpikepdfをanacondaにpipを使い無理やりインストールしたのが原因だと思っています。
今思いつくのはpikepdfで使う部分のコードをコピーして使おうと考えていますが、ほかにもっと楽な方法はありますでしょうか?

以下が.exeに変換する前のコードです。

python

1 2from tkinter import * 3from tkinter import ttk 4from tkinter import filedialog 5from pikepdf import Pdf 6import os,sys 7def onB1Click(): 8 f = filedialog.askopenfile(initialdir='/temp/') 9 if f: 10 with f: 11 v1.set(f.name) 12 global filepath 13 filepath = f.name 14 15def onB2Click(): 16 filename = input("新しいファイル名") 17 password = "aaaaa" 18 pdffile = Pdf.open(filepath, password=password) 19 newpdf= Pdf.new() 20 newpdf.pages.extend(pdffile.pages) 21 output_dir = os.path.dirname(filepath) 22 newpdf.save(filename+".pdf") 23 print("finish") 24 25 # fn = filedialog.askopenfilename(initialdir='/temp/') 26 # if fn: 27 # with open(fn, "rb") as f: 28 # for line in f: 29 # print(line, end='') 30if __name__ == "__main__": 31 root= Tk() 32 root.title("dialogs") 33 root.columnconfigure(0, weight=1) 34 frame = ttk.Frame(root, padding=10) 35 frame.columnconfigure(0, weight= 1) 36 frame.rowconfigure(0, weight=1) 37 frame.grid(sticky=(N,W,S,E)) 38 b1 = ttk.Button(frame, text="ファイル参照", command=onB1Click) 39 b1.grid(row=0, column=0, sticky=(W)) 40 v1 = StringVar() 41 l1 = ttk.Label(frame, textvariable=v1) 42 l1.grid(row=0, column=1) 43 b2 = ttk.Button(frame, text="解除実行", command= onB2Click) 44 b2.grid(row=1, column=0, sticky=(W)) 45 v2 = StringVar() 46 l2 = ttk.Label(frame, textvariable=v2) 47 l2.grid(row=1, column=1) 48 root.mainloop()

追記
tk自体は起動するのですが、プログラムを実行し解除実行をクリックしたところで先のエラーが履かれてしまいます

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

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

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

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

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

guest

回答3

0

自己解決

.pyのコードにfrom pikepdf import _cpphelpersを追加し、コンパイルしなおしたところうまくいきました。

投稿2020/06/15 04:51

135

総合スコア8

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

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

0

同じ階層に拡張子.specというファイルがありますので、それを編集してhiddenimportsにないと言われたモジュールを追加して下さい。

修正前: hiddenimports=[],
修正後: hiddenimports=['pikepdf._cpphelpers'],

.specの拡張子のファイルを指定して下記のように再コンパイルして下さい。

terminal

1pyinstaller hoge.spec

No module named 'pikepdf._cpphelpers'というエラーは解消されると思います。

投稿2020/06/12 09:36

yymmt

総合スコア1615

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

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

0

Windows 10, Anacondaで環境を作成し試したところ、問題なく作成されました。pipで無理やりインストールしたと書かれていますが、pipでインストールしたことが原因ではないようです。

pyinstallerはcondaコマンドで、pikepdfはpipでインストールしました。すなわち

terminal

1conda create -n tera python=3 2conda activate tera 3conda install pyinstaller 4pip install pikepdf

この状態で本ページに掲載されているソースコードをhoge.pyとして保存して

terminal

1pyinstaller hoge.py

とすると無事distというフォルダ以下にhogeというディレクトリが作成されました。この中にあるhoge.exeを実行したところ、特にエラーなくtkinterのウィンドウが表示されました。指定していませんが、pythonは3.8.3がインストールされたようです。

投稿2020/06/11 22:46

yymmt

総合スコア1615

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

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

135

2020/06/12 04:21

エラーの詳細な状況を書かずに申し訳ありません。 tk自体は起動するのですが、ファイル参照でpdfファイルを選択し、解除実行をクリックするとエラーがはかれてしまいます。 回答者様の方では解除実行まで押してもエラーははかれませんでしたでしょうか?
yymmt

2020/06/12 09:32

失礼しました。同エラーが発生しました。解決方法は別途解答欄でお答えします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問