【问题标题】:Using OpenCV with PyInstaller将 OpenCV 与 PyInstaller 一起使用
【发布时间】:2019-08-06 02:37:25
【问题描述】:

尝试使用 PyInstaller 创建 Python 程序的二进制可执行文件时出现错误。但是,config.py 文件似乎存在一些问题。如果我尝试导入 cv2,我会收到以下错误消息:

Traceback (most recent call last):
File "exec_test.py", line 1, in <module>
File "/Users/me/path/to/.env/lib/python3.7/site-packages/PyInstaller/loader/pyimod03_importers.py", line 627, in exec_module
exec(bytecode, module.__dict__)
File "site-packages/cv2/__init__.py", line 89, in <module>
File "site-packages/cv2/__init__.py", line 58, in bootstrap
File "site-packages/cv2/__init__.py", line 56, in load_first_config
ImportError: OpenCV loader: missing configuration file: ['config.py']. 
Check OpenCV installation.
[10914] Failed to execute script exec_test

我正在使用以下代码:

import cv2

if __name__ == '__main__':
    print("Hello, world!")

当我用 Python 运行它时,这完全没问题。

为了编译可执行文件,我正在运行:

pyinstaller --onefile local-processing/exec_test.py

当 PyInstaller 运行时,它有以下输出:

50 INFO: PyInstaller: 3.4
50 INFO: Python: 3.7.2
55 INFO: Platform: Darwin-17.7.0-x86_64-i386-64bit
56 INFO: wrote /Users/me/path/to/neural-network/exec_test.spec
59 INFO: UPX is not available.
60 INFO: Extending PYTHONPATH with paths
['/Users/me/path/to/neural-network/local-processing',
 '/Users/me/path/to/neural-network']
60 INFO: checking Analysis
66 INFO: Building because /Users/me/path/to/neural-network/local-processing/exec_test.py changed
66 INFO: Initializing module dependency graph...
68 INFO: Initializing module graph hooks...
70 INFO: Analyzing base_library.zip ...
2885 INFO: running Analysis Analysis-00.toc
2891 INFO: Caching module hooks...
2894 INFO: Analyzing /Users/me/path/to/neural-network/local-processing/exec_test.py
3366 INFO: Processing pre-find module path hook   distutils
3366 INFO: distutils: retargeting to non-venv dir '/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/distutils/__init__.py'
4023 INFO: Processing pre-safe import module hook   setuptools.extern.six.moves
4409 INFO: Processing pre-find module path hook   site
4410 INFO: site: retargeting to fake-dir '/Users/me/path/to/.env/lib/python3.7/site-packages/PyInstaller/fake-modules'
6439 INFO: Loading module hooks...
6439 INFO: Loading module hook "hook-pkg_resources.py"...
6921 INFO: Processing pre-safe import module hook   win32com
6923 INFO: Loading module hook "hook-scipy.py"...
6923 INFO: Loading module hook "hook-encodings.py"...
6977 INFO: Loading module hook "hook-setuptools.py"...
7237 WARNING: Hidden import "distutils.command.build_ext" not found!
7467 INFO: Loading module hook "hook-cv2.py"...
7468 INFO: Loading module hook "hook-sysconfig.py"...
7474 INFO: Loading module hook "hook-numpy.core.py"...
7536 INFO: Loading module hook "hook-xml.py"...
7590 INFO: Loading module hook "hook-pydoc.py"...
7590 INFO: Loading module hook "hook-numpy.py"...
7618 INFO: Looking for ctypes DLLs
7651 INFO: Analyzing run-time hooks ...
7655 INFO: Including run-time hook 'pyi_rth_pkgres.py'
7656 INFO: Including run-time hook 'pyi_rth_multiprocessing.py'
7666 INFO: Looking for dynamic libraries
7802 INFO: Looking for eggs
7802 INFO: Using Python library /Users/me/path/to/.env/bin/../.Python
7809 INFO: Warnings written to /Users/me/path/to/neural-network/build/exec_test/warn-exec_test.txt
7856 INFO: Graph cross-reference written to /Users/me/path/to/neural-network/build/exec_test/xref-exec_test.html
7875 INFO: checking PYZ
7878 INFO: Building because toc changed
7878 INFO: Building PYZ (ZlibArchive) /Users/me/path/to/neural-network/build/exec_test/PYZ-00.pyz
8535 INFO: Building PYZ (ZlibArchive) /Users/me/path/to/neural-network/build/exec_test/PYZ-00.pyz completed successfully.
8549 INFO: checking PKG
8550 INFO: Building because toc changed
8550 INFO: Building PKG (CArchive) PKG-00.pkg
15351 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully.
15355 INFO: Bootloader /Users/me/path/to/.env/lib/python3.7/site-packages/PyInstaller/bootloader/Darwin-64bit/run
15355 INFO: checking EXE
15356 INFO: Building because toc changed
15356 INFO: Building EXE from EXE-00.toc
15357 INFO: Appending archive to EXE /Users/me/path/to/neural-network/dist/exec_test
15368 INFO: Fixing EXE for code signing /Users/me/path/to/neural-network/dist/exec_test
15372 INFO: Building EXE from EXE-00.toc completed successfully.

我在 macOS High Sierra 上使用 Python 3.7.2、OpenCV 版本 4.0.1 和 PyInstaller 版本 3.4 以及 virtualenv 版本 16.3.0。请让我知道是否有任何其他信息会有所帮助。

谢谢!

【问题讨论】:

    标签: python python-3.x opencv pyinstaller


    【解决方案1】:

    确保您的 OpenCV 和 Pyinstaller 版本是最新的:

    pip install --upgrade opencv-python
    pip install --upgrade pyinstaller
    

    您也可以随时尝试全新安装。

    【讨论】:

    • 感谢您回复我。不幸的是,这没有奏效。我得到了同样的错误。您是否碰巧有任何其他建议。谢谢!
    • 看来问题可能是 OpenCV 安装损坏。我会删除站点包中的所有 OpenCV 实例并重新安装。
    • 我做到了。以前,我使用 Homebrew 安装了 OpenCV,但为了遵循您的建议,我将其卸载并使用 pip 安装。如果我将它作为 python 程序运行,新安装仍然有效,但当我尝试运行 pyinstaller 可执行文件时则不行。
    • 我确保以下文件夹 .env/lib/python3.7/site-packages//usr/local/opt//usr/local/lib/python3.6/site-packages/ 中没有关于 opencv 的内容。
    • 有趣。它可能在 Pyinstaller 结束时。您可以尝试以与 OpenCV 相同的方式卸载/重新安装 Pyinstaller。如果这不起作用,则可能是由于 OpenCV 挂钩导入不兼容。我已经通过降级包版本解决了这个钩子问题。
    【解决方案2】:

    在python中获取cv2的路径,编译时添加:

    import cv2 
    print(cv2.file) # /usr/local/lib/python3.6/dist-packages/cv2/python-3.6/cv2.so
        
    /home:~$ pyinstaller --onefile --paths="/usr/local/lib/python3.6/dist-packages/cv2/python-3.6" main.py
    

    【讨论】:

      【解决方案3】:

      不久前我遇到了同样的问题。 要在 Windows 上解决这个问题,它非常相似。不同之处在于您必须确保找到了 pyinstaller 从中加载信息的正确文件夹,因为一旦您拥有除 cv2 容器之外的其他实例,这将很棘手。例如,在我的机器上,我只能在将路径传递为 --path=AppData\Local\pyinstaller\bincache00_py39_64bit\cv2 时解决它p>

      【讨论】:

        猜你喜欢
        • 2018-07-22
        • 2013-02-01
        • 2016-12-21
        • 2021-05-17
        • 2018-05-23
        • 1970-01-01
        • 2015-11-27
        • 1970-01-01
        相关资源
        最近更新 更多