![見出し画像](https://assets.st-note.com/production/uploads/images/104172455/rectangle_large_type_2_b51ae247a060b56b90f9e9e40db3d6e7.png?width=1200)
Pythonライブラリのバージョン違いでハマった【camelot】
以前こちらの記事を書いた。
こちらで使ったcamelotが、日々の事務作業を自動化するのにいろいろと役立ちそうなので、今回はcamelotを使って会社からもらう給与明細を読み込んでみようと新しくプログラムを書いてみた。
しかし、プログラム以前に環境でハマりまくったので、備忘録としてこちらにハマったことを書こうと思う。
前提
プロジェクト毎にanacondaに仮想環境を作成し、余計なライブラリが入らないように切っている
保育園の献立表のプロジェクト: "kondate_to_calendar"
今回の給与明細のプロジェクト: "income_manager"
![](https://assets.st-note.com/img/1682643664552-yMA67TR1VK.png?width=1200)
やっていることは全て我流なのでお見苦しいかもしれませんが生暖かい目で見守ってください。もしアドバイス等あればコメントいただければ嬉しいです。
pip installするファイルを間違えて環境違い発生
私は前回同様、
こちらのサイトを参考にcamelotを使用しようとした。つまり
pip install camelot-py
とインストールしなければならないところ誤って、
pip install camelot
と書いてしまった。
するとサイトや前回の献立表で使った
camelot.read_pdf('filename.pdf', pages='all')
が使えなくなってしまった。
全然原因がわからず小一時間頭を悩ませた。
結局どうしたかと言うと、ひたすら今回作ったincome_managerという環境と前回作成して動作実績があるkondate_to_calendarという環境を見比べた。バージョンの番号やら入っているライブラリを眺めていると、前回のkondate_to_calendarにはcamelotというライブラリがない代わりにcamelot-pyが入っており、今回のincome_managerにcamelotとcamelot-pyの2種類が入っていることに気づいた。ここでやっとimportしたライブラリを間違えていることに気付き、income_managerのcamelotを削除した。
![](https://assets.st-note.com/img/1682642930496-PXuQKOK2k3.png?width=1200)
よくよく調べてみると
camelot -> 古い。python2.x向け。
camelot-py -> 新しい。python3.xに最適化。
という違いがあるらしい。
当然だがcamelotとcamelot-pyという接尾辞の違いだけでインドとインドネシアくらい違うので次からの環境構築の際は注意したい。
Camelotとpypdfのバージョン依存関係にハマる
camelotを削除しcamelot-pyに統一したところ、今度は
import camelot
がインポートエラーを起こすようになった。
ChatGPTにエラーメッセージを投げてみるとPyPDF2との互換性の問題を指摘されたので、income_managerとkondate_to_calendarのpypdf周りのバージョンを見比べた。kondate_to_calendar(動作確認済)ではpypdf2のバージョンが2.10.5なのに対し、income_manager(作成中の環境)ではpypdf2のバージョンが3.0.1だった。なるほどここにエラーが潜んでいそうだ。
![](https://assets.st-note.com/img/1682645314416-nig27Or3Hn.png?width=1200)
camelot-pyがどのpypdf2のバージョンに対応しているかは不明だが、とりあえず動作確認済の2.10.5にダウングレードしてみる。
pip install pypdf2==2.10.5
そして、実行してみると。
import camelot
camelot.read_pdf('sample.pdf', pages='all')
やっと読み込めた…!!!
ここまで約2時間である。
最後に給与明細のpdfを読み込んでみよう
やっと前回のスタートラインまで戻ってきたので、camelotを使って給与明細を読み込んでみよう。
import camelot
camelot.read_pdf('給与明細.pdf', pages='all')
camelot.plot(tables[0], kind='contour').show()
tables[0].df
![](https://assets.st-note.com/img/1682647037744-ddi8NbIxkF.png?width=1200)
たった4行実行するのに2時間かかる院卒おる?
とはいえなんとか動いて良かった。
なるほど、表の番号は左上からとは限らないんだな。
今回作成したincome_managerは給与明細に記載されている給料や控除の額(表2部分)をデータベースに突っ込んで、毎年の昇給額やお国にどのくらい年貢を納めているかの確認、年毎のふるさと納税の限度額予想などに活用してみたいと思っている。
今までは給与明細はスプレッドシートに手入力してまとめていたが、表ゆえに新しい項目が入ると行を追加しなければならず表示が崩れるなどの使いにくさがあった。いちいちPCを起動してプログラムを走らせてデータベースを作ることを考えるとスマホで手入力した方が早そうだが…。
個人的にChatGPTの登場でプログラミングの心理的ハードルはかなり下がった。とりあえずエラーが出たら投げてみると間違いも多いものの何かしらのヒントをくれるので次にやることの見通しが立ちやすい気がする。