35
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PyinstallerでOpenCVとPyQt5をEXE化する(Windows編)

Last updated at Posted at 2018-02-20

##はじめに
PyQtとOpenCVを使って動画解析のアプリを作って欲しいと言われたけど、肝心の使う人がTerminalって何ですか?という感じ。。
Python,Anacondaなんて当然しらない。。
ということでpythonをEXE化しよう!!と思ったけど大変でした。

Windowsで上手くいった、Anacondaを使った環境構築の手順を書きます。

##Anaconda環境構築
$ conda create -n py36 python=3.6
$ activate py36
完了です。pythonは3.6でなくても3.5でもその後の環境構築は上手くいきました。

##モジュールインストール
$ pip install pypiwin32
$ pip install pyinstaller
$ pip install opencv-python
$ pip install pyqt5

##PyQt5とOpenCVで動画読み込むアプリ作る
ここは各々作ってください。

##PyinstallerでEXE化
pyinstaller 変換ファイル名.py --onefile --debug --clean
エラーなく実行できた!
しかし。。。OpenCVのVideoCaptureで死んでるではないか orz..
いろいろ検索しているとopencv_ffmpeg*_*.dllが必要だとわかった。
ということで、Opencv公式(https://github.com/opencv/opencv/releases/)
からexeファイルをダウンロードして、実行してopencv_ffmpeg340_64.dllを探す。それをPyinstallerでexe化しているファイルがあるdistフォルダに突っ込む!
その状態でexeファイルを実行すると上手く行きました。

##ffmpeg.dllが邪魔、一つにしたい
今のままでも実行できて良いですが、せっかくならffmpeg.dllもまとめてone file化したいです。こちらのスタック・オーバーフローを参考にしました。
変換ファイル名.specを以下のように書き換えます。

変換ファイル名.spec
# -*- mode: python -*-

block_cipher = None

def get_opencv_path():
    import cv2
    opencv_path = cv2.__path__[0]
    return opencv_path

a = Analysis(['変換ファイル名.py'],
     pathex=['C:\\path-to-ディレクトリ'],
     binaries=None,
     datas=[('C:\\~path-to-ffmpeg~\\opencv_ffmpeg340_64.dll','.')],
     hiddenimports=[],
     hookspath=[],
     runtime_hooks=[],
     excludes=[],
     win_no_prefer_redirects=False,
     win_private_assemblies=False,
     cipher=block_cipher)

dict_tree = Tree(get_opencv_path(), prefix='cv2', excludes=["*.pyc"])
a.datas += dict_tree
a.binaries = filter(lambda x: 'cv2' not in x[0], a.binaries)



pyz = PYZ(a.pure, a.zipped_data,
         cipher=block_cipher)
exe = EXE(pyz,
      a.scripts,
      a.binaries,
      a.zipfiles,
      a.datas,
      name='変換ファイル名',
      debug=False,
      strip=False,
      upx=True,
      console=True )

上記のようにffmpegのファイルパスを指定して、specファイルを修正したあとは

pyinstaller 変換ファイル名.spec --onefile

これでexeファイルだけになります。

35
46
2

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
35
46

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?