PDF結合をpythonにやらせたい+ pipでインストールしたパッケージがNo module named〜 と言われるのを何とかしたい!!!
環境
M1Mac Big Sur ver11.2.3
Python 3.9.0
取り上げる内容
・python3と外部パッケージPyPDF2を用いたPDFファイルの結合
・pipでインストールした外部パッケージが認識されない時の対処法(パスを通す)
PDF結合を楽にやりたい!!
電子書籍にするために大量にスキャンしたデータをPDFに、そして結合ということを最近やっていたが、どうも某iL○vePDFだと100MBまでしか作業できない。
・・・と調べていると、普通にpythonで出来るじゃん。
iL○vePDFがダメなら、自分でやればいいじゃない!・・・はい。
まずはpythonでPDF操作する用のパッケージをインストール。
XXXXXXMac ~ % pip install PyPDF2
その後書いたのが下のプログラム。意気揚々。
# mergePDF.py
import PyPDF2
merger = PyPDF2.PdfFileMerger()
merger.append('sample1.pdf')
merger.append('sample2.pdf')
merger.write('merged.pdf')
merger.close()
print("done")
だがしかしbut・・・
No module named PyPDF2を吐かれる ( ´Д`)y━・~~
上のpyプログラムの実行結果。
XXXXXXMac ~ % cd desktop
XXXXXXMac desktop % python mergePDF.py
Traceback (most recent call last):
File "mergePDF.py", line 1, in <module>
import PyPDF2
ImportError: No module named PyPDF2
「PyPDF2なんてモジュールありませんよ。」
いや何でだよ!もっと隈なく探せよ!!!!
とりあえず本当にPyPDF2が入っているか、及び場所の確認。
pip show PyPDF2で確認できる。
XXXXXXMac desktop % pip show PyPDF2
Name: PyPDF2
Version: 1.26.0
・・・略・・・
Location: /usr/local/lib/python3.9/site-packages
インストールはされてるっぽい。そして肝心なのが場所で、どうも
/usr/local/lib/python3.9/site-packages
に入ってると。はぁ。
では当のpython兄貴はいつもimport用にどこを探しているかと言うと、
# print_sys_path.py
import sys, pprint
pprint.pprint(sys.path)
上のプログラムを作って実行すればわかる。
XXXXXXMac desktop % python print_sys_path.py
['/Users/(僕の名前)/Desktop',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
'/Library/Python/2.7/site-packages',
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python',
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC']
長い。けど要するに、PyPDF2が入っている/usr/local/lib/python3.9/site-packagesの中は探してすらいないよと言うこと。そりゃ当然絶対入っていない引き出し漁っても見つかるわけがない。
要は「ここの引き出しの中も探してね」と教えてあげる必要がある。
# path通すのはめちゃくちゃ簡単
さっきの.pyファイルの一番上にimport sysと、sys.path.append("パス")を追記。終わり。
再びターミナルで実行しまふ。
#mergePDF.py
import sys
sys.path.append("/usr/local/lib/python3.9/site-packages")
import PyPDF2
merger = PyPDF2.PdfFileMerger()
merger.append('sample1.pdf')
merger.append('sample2.pdf')
merger.write('merged.pdf')
merger.close()
print("done")
XXXXXXMac desktop % python mergePDF.py
done
完了!至極簡単。圧倒的イージー。
感想
no module foundに一瞬戸惑ったが、pathの通し方さえわかれば簡単。
これでPDF操作も楽になったし、モジュールが見つからないと言われた時の対処法もバッチリ。