skip to content
barorin&

WindowsでPythonライブラリを動かす|tabula-pyのJava・OpenCV・exe化

/ 7 min read

Table of Contents

はじめに

Pythonのライブラリは、Windowsだとライブラリ以外のところでつまずくことがよくあります。別のソフトが必要だったり、ファイルの場所が分からなかったり、パスの通し方で引っかかったり。

実際に引っかかったものをまとめました。

tabula-py:Javaが入っていない

PDFの表を読み取る tabula-py を実行すると、このエラーが出ることがあります。

JavaNotFoundError: `java` command is not found from this Python process.
Please ensure Java is installed and PATH is set for `java`

tabula-py は内部でJava製のツールを呼び出しているため、Java本体が別途必要です。ライブラリを入れただけでは動きません。

Javaを入れる

Javaのダウンロードページから入手してインストールします。

PATHを通す

  1. 「設定」の検索欄で 「システム環境変数の編集」 を検索して開く
  2. 環境変数を押す
  3. システム環境変数の Path を選択して編集
  4. Javaの bin ディレクトリを追加する

既定のインストール先は次のような場所です。

C:\Program Files (x86)\Java\jre1.8.0_341\bin

設定後、再起動して反映させます。

OpenCV:カスケードファイルの場所

顔検出などで使うカスケードファイルは、**OpenCVのパッケージに同梱されています。**別途ダウンロードする必要はありません。

Terminal window
$ pip install opencv-python

仮想環境に入れた場合、ファイルはその環境の site-packages の下にあります。

C:/Users/user/Anaconda3/envs/opencv/Lib/site-packages/cv2/data/haarcascade_frontalface_alt.xml

PyInstaller:スクリプトをexeにする

Pythonが入っていない人に配りたいときは、実行ファイルにまとめます。

Terminal window
$ pip install pyinstaller
$ pyinstaller --onefile --windowed hoge.py
オプション 意味
--onefile 1つのexeファイルにまとめる
--windowed コンソール画面を表示しない

生成物は dist ディレクトリに作られます。

完了を知らせる

--windowed を付けるとコンソールが出ないため、**print() の出力はどこにも表示されません。**処理が終わったことを伝えるには、別の手段が必要です。

標準ライブラリの tkinter でメッセージボックスを出すのが手軽です。

import sys
from tkinter import messagebox
def main():
# ここにメインの処理を書く
print("メイン処理を実行中...") # windowedでは表示されない
messagebox.showinfo("完了", "処理が完了しました。")
if __name__ == "__main__":
main()
sys.exit()

エラーを伝えたい場合は showerror を使います。

try:
main()
except Exception as e:
messagebox.showerror("エラー", f"処理に失敗しました。\n{e}")
sys.exit(1)

おわりに

Windowsで動かないときは、Pythonのコードよりもその外側を疑うのが近道です。別のソフトが必要なのか、PATHが通っていないのか、パスの書き方の問題なのか。この3つを順に確認すれば、たいていは解決します。

この記事を書いた人

barorinのプロフィール画像

barorin公認会計士

会計とITの二足のわらじで働く公認会計士です。Pythonを中心に、会計・監査の実務で実際に使っているコードや、Ubuntu・Raspberry Piの設定メモを書いています。