python - Mac 上 OpenCV/import cv2 的问题,尝试了很多东西,现在出现新错误

标签 python macos opencv

错误:

  • pip3 安装 opencv-contrib-python
  • 导入 cv2
  • 原始错误:找不到符号:___addtf3
  • 当前错误:找不到符号:__cg_jpeg_resync_to_restart

  • 环境:
  • opencv-contrib-python 4.1.2.30
  • iMac、macOS Catalina 10.15.2
  • Python 3.7.5
  • pip --version: pip 19.3.1 来自/usr/local/lib/python3.7/site-packages/pip (python 3.7)
  • 使用 Homebrew

  • 到目前为止我尝试过的大约 30 件事:
    Error 1:
      File "/usr/local/lib/python3.7/site-packages/cv2/__init__.py", line 3, in <module>
        from .cv2 import *
      ImportError: numpy.core.multiarray failed to import
    Try 1:
        import numpy.core.multiarray before import cv2
    Error 2:
      File "/Users/mbennett/Library/Python/3.7/lib/python/site-packages/numpy/__init__.py", line 142, in <module>
        from . import core
      File "/Users/mbennett/Library/Python/3.7/lib/python/site-packages/numpy/core/__init__.py", line 47, in <module>
        raise ImportError(msg)
      ...
      Original error was:
        dlopen(/Users/mbennett/Library/Python/3.7/lib/python/site-packages/numpy/core/_multiarray_umath.cpython-37m-darwin.so, 2): Symbol not found: ___addtf3
      Referenced from: /Users/mbennett/Library/Python/3.7/lib/python/site-packages/numpy/core/../.dylibs/libquadmath.0.dylib
      Expected in: /usr/lib/libSystem.B.dylib
     in /Users/mbennett/Library/Python/3.7/lib/python/site-packages/numpy/core/../.dylibs/libquadmath.0.dylib
     ...
    Importing the numpy c-extensions failed.
    - x Try uninstalling and reinstalling numpy.
    - If you have already done that, then:
      x 1. Check that you expected to use Python3.7 from "/usr/local/opt/python/bin/python3.7",
         and that you have no directories in your PATH or PYTHONPATH that can
         interfere with the Python and numpy version "1.17.4" you're trying to use.
      2. If (1) looks fine, you can open a new issue at
         https://github.com/numpy/numpy/issues.  Please include details on:
         - how you installed Python
         - how you installed numpy
         - your operating system
         - whether or not you have multiple versions of Python installed
         - if you built from source, your compiler versions and ideally a build log
    - If you're working with a numpy git repository, try `git clean -xdf`
      (removes all files not under version control) and rebuild numpy.
    --
    Trying to change symlinks
    Python links in 2 places: /usr/bin AND /usr/local/bin
    In /usr/bin, AS ROOT, cannot remove or change python link
        rm python
        rm: python: Operation not permitted
        # wtf, whoami -> root
    --
    Next try: Change order of path, put /usr/local/bin BEFORE /usr/bin, then try changing symlinks there
        or try changing symlink first
    (links changed, stopped here)
    --
    Try 1b: installing again now that pip is really pip3
        No
        # pip now = pip3
        pip uninstall opencv-contrib-python
        pip install opencv-contrib-python
            OK: Successfully installed opencv-contrib-python-4.1.2.30
        No, same errors
    Try 1c:
        No
        pip uninstall opencv-contrib-python
        pip install -U opencv-contrib-python
    Try 1d:
        No, same version numpy-1.18.1
        pip uninstall numpy
        pip install numpy -U
    Try 1e:
        No
        python -c "import numpy;print numpy.version;print numpy.file";
        ^-- and added ()'s to print
    Try 1f:
        No
        # put /usr/local/lib before /usr/lib
        export DYLD_LIBRARY_PATH="/usr/local/lib:$DYLD_LIBRARY_PATH"
    Try 1g:
        No
        pip install --upgrade --force-reinstall --no-cache-dir numpy
    Try 1h:
        No
        pip install --upgrade --force-reinstall --no-cache-dir scipy
            Successfully uninstalled numpy-1.18.1
            Found existing installation: scipy 1.3.3
            Uninstalling scipy-1.3.3:
                Successfully uninstalled scipy-1.3.3
            Successfully installed numpy-1.18.1 scipy-1.4.1
    Try 1i:
        No
        Try very old scipy
        # conda uninstall scipy
        # conda install scipy=0.15.0
        pip uninstall scipy
        X pip install scipy=0.15.0   # bad syntax
        x pip install scipy==0.15.0
            ^-- LOTS of errors
        Reintalling w default version it says:
            Requirement already satisfied: numpy>=1.13.3 in /usr/local/lib/python3.7/site-packages (from scipy) (1.18.1)
        Installing collected packages: scipy
        Successfully installed scipy-1.4.1
    Try 1j:
        No
        Try rolling back scipy to 1.13.3
        pip uninstall scipy
        pip install scipy==1.13.3
            ^-- not a valid version...
    Try 1k:
        No
        Try rolling back scipy to 1.4.0
        (still uninstalled)
        pip install scipy==1.4.0
    Try 1l:
        No
        Try uninstalling the Homebrew version of numpy
        # pip uninstall scipy
        # brew update
        # brew upgrade
        brew uninstall numpy
            Uninstalling /usr/local/Cellar/numpy/1.11.2... (474 files, 9.5MB)
    Try 1m:
        No  (likely scipy is subset of numpy, vs other way around?)
        Try uninstalling the Homebrew version of scipy
        brew uninstall scipy
            Error: No such keg: /usr/local/Cellar/scipy
    Try 1n:
        ? Try installing blas?
        ? "___addtf3 which is a GCC software floating point routine provided by a gfortran"
            ^-- "libquadmath uses the ___addtf3 routine, rather than defines it"
        Try installing gfortran
            x pip install gfortran
            brew install gfortran
            Error:
                Error: No available formula with the name "gfortran" 
                GNU Fortran is part of the GCC formula:
                    brew install gcc
    Try 1o:
        Install gcc:
            brew install gcc
            Error:
                Error: gcc 6.2.0 is already installed
                To upgrade to 9.2.0_3, run `brew upgrade gcc`.
        ,Then retry installing gfortran
        ,    brew install gfortran
    Try 1p:
        No
        brew upgrade gcc
        brew install gfortran
            Error: No available formula with the name "gfortran" 
            GNU Fortran is part of the GCC formula:
                brew install gcc
        # retest import
    Try 1q:
        No
        Try installing clang4 or clang4-r
        x brew install clang4
        x brew install clang4-r
        x brew install clang
        --
    X install-clang4.sh
    --------------------
    # Download binary
    curl -O http://r.research.att.com/libs/clang-4.0.0-darwin15.6-Release.tar.gz
    # Extract binary onto root directory
    tar fvxz clang-4.0.0-darwin15.6-Release.tar.gz -C /
    # Overwrite the ~/.R/Makevars
    cat <<- EOF > ~/.R/Makevars
    # The following statements are required to use the clang4 binary
    CC=/usr/local/clang4/bin/clang
    CXX=/usr/local/clang4/bin/clang++
    CXX11=$CXX
    CXX14=$CXX
    CXX17=$CXX
    CXX1X=$CXX
    LDFLAGS=-L/usr/local/clang4/lib
    # End clang4 inclusion statements
    EOF
    --
    Try 1r:
        x try the Sierra version of gfortran?
        gfortran is part of GCC now, and Web says it's current
    --
    Try 1s:
        No
        Try overwriting python3 (links?)
        cd /usr/local/Cellar/python
        cp -r 3.7.5 3.7.5.bak
        brew link --overwrite python3
            Warning: Already linked: /usr/local/Cellar/python/3.7.5
            To relink:
                brew unlink python
                brew link python
        brew link --overwrite python
    Try 1t:
        X gfortran ... The missing symbol in libgcc isn't surprising
            since you're trying to run code compiled with a 4.6 gfortran in a 4.2 runtime environment.
        No, gfortran part of gcc, remember!
    Try 1u:
        No, same import error
        try installing openblas 
        x pip install openblas
        brew install openblas    # ok
    Try 1v:
        No:
        Try installing or building gdal2-python
        brew install gdal2-python
            Error: No formulae found in taps.
        x brew reinstall --build-from-source gdal2-python
    Try 1w:
        No
        Try fixing gcc?
        cd /usr/local/lib
        x chown -R mbennett gcc  (already done)
        brew link gcc
            Warning: Already linked: /usr/local/Cellar/gcc/9.2.0_3
            To relink:
        brew unlink gcc  # worked
        brew link gcc  # worked
        But same error in python
    Try 1x:
        No, and now have different error
        try installing older version of opencv 4x -> 3x
        x pip install opencv-contrib-python==3.3.0.10
            ERROR: Could not find a version that satisfies the requirement opencv-contrib-python==3.3.0.10 (from versions: 3.4.2.16, 3.4.2.17, 3.4.3.18, 3.4.4.19, 3.4.5.20, 3.4.8.29, 4.0.0.21, 4.0.1.24, 4.1.0.25, 4.1.1.26, 4.1.2.30)
            ERROR: No matching distribution found for opencv-contrib-python==3.3.0.10
        pip list | grep opencv
            opencv-contrib-python 4.1.2.30
        pip install opencv-contrib-python==3.4.2.16
            Different error:
            ImportError: dlopen(/usr/local/lib/python3.7/site-packages/cv2/cv2.cpython-37m-darwin.so, 2): Symbol not found: __cg_jpeg_resync_to_restart
            Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
            Expected in: /usr/local/lib/libJPEG.dylib
                in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
        # try latest version 3
        pip install opencv-contrib-python==3.4.8.29
            Different Error:
            File "/usr/local/lib/python3.7/site-packages/cv2/__init__.py", line 3, in <module>
            from .cv2 import *
            ImportError: dlopen(/usr/local/lib/python3.7/site-packages/cv2/cv2.cpython-37m-darwin.so, 2): Library not loaded: @loader_path/libpng16.16.dylib
            Referenced from: /usr/local/lib/python3.7/site-packages/cv2/.dylibs/libfreetype.6.dylib
            Reason: Incompatible library version: libfreetype.6.dylib requires version 54.0.0 or later, but libpng16.16.dylib provides version 43.0.0
        # try first version of 4x
        pip install opencv-contrib-python==4.0.0.21
              File "/usr/local/lib/python3.7/site-packages/cv2/__init__.py", line 3, in <module>
              from .cv2 import *
                ImportError: dlopen(/usr/local/lib/python3.7/site-packages/cv2/cv2.cpython-37m-darwin.so, 2): Symbol not found: __cg_jpeg_resync_to_restart
                Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
                Expected in: /usr/local/lib/libJPEG.dylib
     in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
        # ok, back to latest
        pip install opencv-contrib-python==4.1.2.30
        import cv2
            File "/usr/local/lib/python3.7/site-packages/cv2/__init__.py", line 3, in <module>
                from .cv2 import *
            ImportError: dlopen(/usr/local/lib/python3.7/site-packages/cv2/cv2.cpython-37m-darwin.so, 2): Library not loaded: @loader_path/libpng16.16.dylib
            Referenced from: /usr/local/lib/python3.7/site-packages/cv2/.dylibs/libfreetype.6.dylib
            Reason: Incompatible library version: libfreetype.6.dylib requires version 54.0.0 or later, but libpng16.16.dylib provides version 43.0.0
    Try 1y:
        try upgrading libpng
        pip uninstall libpng
            pip uninstall libpng
            WARNING: Skipping libpng as it is not installed.
        pip install libpng
            ERROR: Could not find a version that satisfies the requirement libpng (from versions: none)
            ERROR: No matching distribution found for libpng
        X brew update libpng
        brew upgrade libpng  # ok
        python / import cv2
            New Error:
            File "/usr/local/lib/python3.7/site-packages/cv2/__init__.py", line 3, in <module>
                from .cv2 import *
            ImportError: dlopen(/usr/local/lib/python3.7/site-packages/cv2/cv2.cpython-37m-darwin.so, 2): Library not loaded: @loader_path/libtiff.5.dylib
            Referenced from: /usr/local/lib/python3.7/site-packages/cv2/.dylibs/liblept.5.dylib
            Reason: Incompatible library version: liblept.5.dylib requires version 11.0.0 or later, but libTIFF.dylib provides version 8.0.0
    Try 1z:
        try upgrading libtiff
        brew upgrade libtiff   # ok
        import cv2 -> New Error:
            File "/usr/local/lib/python3.7/site-packages/cv2/__init__.py", line 3, in <module>
            from .cv2 import *
            ImportError: dlopen(/usr/local/lib/python3.7/site-packages/cv2/cv2.cpython-37m-darwin.so, 2): Symbol not found: __cg_jpeg_resync_to_restart
            Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
            Expected in: /usr/local/lib/libJPEG.dylib
            in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
    --
    Try 1aa:
        No
        Try to fix Symbol not found: __cg_jpeg_resync_to_restart
        cd /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources
        sudo mv libJPEG.dylib libJPEG.dylib.bak
            Error: mv: rename libJPEG.dylib to libJPEG.dylib.bak: Operation not permitted
        sudo ln -sf libJPEG.dylib /usr/local/lib/libJPEG.dylib
        sudo mv libPng.dylib libPng.dylib.bak
        sudo ln -sf libPng.dylib /usr/local/lib/libPng.dylib
        sudo mv libTIFF.dylib libTIFF.dylib.bak
        sudo ln -sf libTIFF.dylib /usr/local/lib/libTIFF.dylib
        sudo mv libGIF.dylib libGIF.dylib.bak
        sudo ln -sf libGIF.dylib /usr/local/lib/libGIF.dylib
    
    Post on Stack Overflow
    

    最佳答案

    我同意这些评论,只需使用虚拟环境,不要干扰系统的 python。但我建议使用 miniconda(原因:它很容易卸载,而不是 anaconda 的大小,不错的文档)。 [编辑:我编辑了对我有用的更具可重复性的步骤,并解决了评论中的一些问题。]

  • 卸载 Anaconda ( https://docs.anaconda.com/anaconda/install/uninstall/ ) 和 ( https://docs.conda.io/projects/conda/en/latest/user-guide/install/linux.html#uninstalling-anaconda-or-miniconda ) 包括可选的第三步(查找以 # >>> conda init >>> 开头的块)
  • 按照此处的安装步骤操作 ( https://docs.conda.io/projects/conda/en/latest/user-guide/install/macos.html )。当被要求运行 conda init 时说不(我们将首先配置)。安装完成后,关闭并重新打开终端。
  • 配置( https://docs.conda.io/projects/conda/en/latest/user-guide/configuration/index.html )。矿:
    $ conda config --set auto_activate_base False
    $ conda config --set allow_softlinks False
    $ conda config --set show_channel_urls True
    $ conda config --add channels conda-forge
    

  • [在原来的答案中我推荐了 conda config --set pip_interop_enabled True .现在我想是 建议的事情。因此,将其忽略(默认为 False)。]
  • 现在发出这些命令(我假设是 catalina 的 zshell)
    $ source <your-path-to-miniconda3>/bin/activate
    (base) $ conda update conda
    (base) $ conda init zsh
    

    并关闭并重新启动您的 shell 以使更改生效。

  • 注意:1) 仅将基础环境用于 conda update conda 2) 在创建 env 时指定一个 python 版本 3) 无论何时安装 python,你总是得到 pip、wheel、setuptools 4) conda deactivate 5) 关于auto_activate_base , 如果您确实将其设置为 False(默认为 True),请记住 conda python 路径仅在环境激活后设置。

    创建并激活一个环境:
    conda create -n my-env python=3.7
    conda activate my-env
    

    甚至(对于来自 conda-forge 的 opencv 4.2,假设上述配置):
    conda create -n my-opencv-env python=3.7 opencv=4.2
    conda activate my-opencv-env
    

    另外注意:如果要在环境中安装包,记得先激活环境,然后conda install package-name .

    关于您在下面的评论中提到的 numpy 问题,请首先检查在创建 env 时要安装的软件包中是否包含 numpy。然后,运行一个文件,将其导入为 np 和 print(np.__file__) . (你不应该在你的 miniconda 环境之外有引用)。

    更多信息:https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html .您可以使用 conda 或 pip 安装软件包(我更喜欢 conda)。

    关于python - Mac 上 OpenCV/import cv2 的问题,尝试了很多东西,现在出现新错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59815146/

    相关文章:

    python - 在 Python 中保留函数上下文

    python - 从图像中重叠的字母中提取数据

    java - 如何使用 OpenCv 模糊矩形

    objective-c - 将 OSReturn 值转换为人类可读的定义

    objective-c - 在沙盒中从 objective-c /swift 重置 Finder

    linux - OSX 上的 "pkg-config script could not be found"

    python - 我如何使用Python openCV在表格的这张图片中找到左上角框的位置(x,y,宽度,高度)?

    多处理中的 Python 对象

    python - unotools - 尝试使用 python 将 ods 或 excel 文件转换为 csv

    python - 如何在打印消息时删除 'b' 前缀?