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を通す
- 「設定」の検索欄で 「システム環境変数の編集」 を検索して開く
- 環境変数を押す
- システム環境変数の Path を選択して編集
- Javaの
binディレクトリを追加する
既定のインストール先は次のような場所です。
C:\Program Files (x86)\Java\jre1.8.0_341\bin設定後、再起動して反映させます。
OpenCV:カスケードファイルの場所
顔検出などで使うカスケードファイルは、**OpenCVのパッケージに同梱されています。**別途ダウンロードする必要はありません。
$ pip install opencv-python仮想環境に入れた場合、ファイルはその環境の site-packages の下にあります。
C:/Users/user/Anaconda3/envs/opencv/Lib/site-packages/cv2/data/haarcascade_frontalface_alt.xmlPyInstaller:スクリプトをexeにする
Pythonが入っていない人に配りたいときは、実行ファイルにまとめます。
$ pip install pyinstaller$ pyinstaller --onefile --windowed hoge.py| オプション | 意味 |
|---|---|
--onefile |
1つのexeファイルにまとめる |
--windowed |
コンソール画面を表示しない |
生成物は dist ディレクトリに作られます。
完了を知らせる
--windowed を付けるとコンソールが出ないため、**print() の出力はどこにも表示されません。**処理が終わったことを伝えるには、別の手段が必要です。
標準ライブラリの tkinter でメッセージボックスを出すのが手軽です。
import sysfrom 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つを順に確認すれば、たいていは解決します。
