LoginSignup
2
2

More than 1 year has passed since last update.

pythonでPDF結合+外部モジュールが見つからないと言われた時の対処

Last updated at Posted at 2021-07-08

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操作も楽になったし、モジュールが見つからないと言われた時の対処法もバッチリ。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2