Packaging OpenCV with a python app

2019-01-26 11:46发布

问题:

So I'm contemplating what language to use in the development of an app that uses OpenCV. As a part of my decision, I'm interested in knowing how easy/difficult it is to include the opencv library in the final app. I'd really like to write this in python because the opencv bindings are great, python's easy, etc.

But I haven't been able to find a clear answer on stuff like "does py2app automatically bundle opencv when it sees the import cv line" (I think not) and if not, then is there a known way to do this?

In general, I would like to know the best way to distribute a python desktop app with opencv.

回答1:

I've effectively packaged, deployed, and shipped a Python app using OpenCV with cxFreeze.

http://cx-freeze.sourceforge.net/

Yes, cxFreeze auto picked up the python extensions to OpenCV. I had to manually copy the OpenCV DLLs (Windows), but that was a minor issue that can be solved by a post-processing step in cxFreeze. It does pick up other DLL's, so I'm not sure what the issue was.

In fact, it worked so well I was surprised. The ONLY thing it didn't pick up properly was a QT library. Basically here were my steps (I'm using QT so ignore that part if you aren't):

  1. cxfreeze App.py --target-dir App --base-name Win32GUI --include-modules PySide.QtNetwork
  2. Copy over the opencv\build\x86\vc9\bin files to the App directory.

That's it.



回答2:

You can have a look at http://www.pyinstaller.org/ It's great and it packages the necessary dll for opencv.

For opencv to work it py2exe also package numpy. Make sure you add a dependency for it in case you are using py2exe.