当前位置: 首页 > 知识库问答 >
问题:

Mac上OpenCV/导入cv2的问题,已经尝试了很多东西,现在新的错误

孙凌
2023-03-14

错误:

    null

环境:

  • opencv contrib python 4.1.2.30

到目前为止,我已经尝试了大约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

共有1个答案

尉迟越
2023-03-14

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

>

  • 卸载巨蟒(https://docs.anaconda.com/anaconda/install/uninstall/)及(https://docs.conda.io/projects/conda/en/latest/user-guide/install/linux.html#uninstalling-anaconda或miniconda),包括可选的第三步(查找以#

    $ 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——将pip\u interop\u enabled设置为True。现在我认为这是一个错误的建议。因此,将其忽略(默认值为False)。]

    现在发出这些命令(我假设是catalina的zshell)

    $ source <your-path-to-miniconda3>/bin/activate
    (base) $ conda update conda
    (base) $ conda init zsh
    

    关闭并重新启动shell,以便更改生效。

    注意:1)仅将基本环境用于conda update conda2)在创建环境时指定python版本3)安装python时始终会获得pip、轮子、设置工具4)conda deactivate5)关于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安装包名

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

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

  •  类似资料:
    • 问题内容: 我正在尝试在 Jupyter笔记本* 上导入 cv2 ,但出现此错误: * 我很沮丧,因为我现在已经花了几个小时来研究这个简单的问题。它适用于Pycharm,但不适用于Jupiter笔记本。我已经将cv2安装到Python2.7的站点程序包中,将Jupyter的内核配置为python2,浏览了文档,但是我仍然不明白我所缺少的内容吗? (我使用的是Windows 10,并且使用了Micr

    • 我第一次尝试将OpenCV用于Python 3。要安装,我只需在终端中键入“pip3安装opencv-python”。当我这样做时,我在Finder(我在Mac上)中看到,在 /usr/local/lib/python3.7/site-packages,我现在有一个名为“cv2”的新文件夹。这很奇怪。为什么不是cv3,就像我用pip3一样?我不知道。 当我尝试从python3导入cv2时,它说“没

    • 我正在尝试从Ansible 2.9升级。2至2.10。我知道当前的ansible需要删除,我相信我在这方面取得了成功。文档中有几个不同的命令行(使用pip安装Ansible)。那个似乎没有出错的人使用了python3,并产生了。。。 但“which ansible”不产生输出,“ansible--version”命令未找到。 使用原始的python(2.7.16)产生... 但仍然没有答案。你知道

    • 我正在将一个旧项目加载到Android Studio中。Android Studio要求更新我允许的内容。 然而,现在我得到了错误 构建失败10s 30ms运行构建9s 822ms加载构建10ms配置构建413ms计算任务图566ms运行任务8s 826ms null C:/Users/my name/.gradle/caches/transforms-1/files-1.1/appcompat-

    • 问题内容: 我无法在shell中的python 2.7中导入numpy。我先安装python ,然后再安装numpy 。我尝试了没有,但出现了拒绝权限错误。无论如何,我得到这个: 在我有以下内容: 和: 的输出是 问题答案: 至于解决方法,请尝试将Python降级为2.7.9,例如: 通过覆盖现有版本,似乎在2.7.10中存在一些特定问题。然后再次重新链接(如果需要)。 还要确保您的设置正确(不要