You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

pip freeze无法显示已安装OpenCV包,却可正常导入问题求助

解决OpenCV可导入但pip freeze无法检测到的问题

我之前也碰到过完全一样的情况!你遇到的这个问题核心原因很明确:你是通过源码编译安装的OpenCV,而非使用pip工具安装——pip freeze只能追踪通过pip安装的包,源码编译后直接放到Python库目录的包不会被pip的包管理系统记录,所以自然搜不到。

先确认你的情况:从你给出的cv2.__file__路径/usr/local/lib/python3.6/dist-packages/cv2.cpython-36m-x86_64-linux-gnu.so来看,确实是编译后手动部署到dist-packages目录的,完全符合这个场景。

下面给你两个可行的解决方案:

方案一:手动给OpenCV添加pip识别的元信息

如果不想重新安装,只想让pip freeze能显示这个包,可以手动创建pip识别的元数据目录:

  1. 进入OpenCV所在的Python库目录:
    cd /usr/local/lib/python3.6/dist-packages
    
  2. 创建对应版本的dist-info目录:
    sudo mkdir opencv_python-3.4.2.dist-info
    
  3. 进入该目录,创建METADATA文件并写入基础信息:
    sudo nano opencv_python-3.4.2.dist-info/METADATA
    
    写入以下内容(可根据实际情况调整):
    Metadata-Version: 2.1
    Name: opencv-python
    Version: 3.4.2
    Summary: OpenCV Python bindings
    Home-page: https://opencv.org/
    Author: OpenCV Development Team
    License: BSD-3-Clause
    
  4. 再创建INSTALLER文件,标注安装来源:
    echo "source" | sudo tee opencv_python-3.4.2.dist-info/INSTALLER
    
    完成后再执行pip freeze | grep opencv就能看到opencv-python==3.4.2了。

方案二:改用pip安装对应版本的OpenCV

如果想彻底解决包管理的问题,建议卸载当前源码编译的版本,改用pip安装:

  1. 删除现有的OpenCV文件:
    sudo rm -rf /usr/local/lib/python3.6/dist-packages/cv2*
    
  2. 安装对应3.4.2版本的opencv-python:
    pip install opencv-python==3.4.2
    
    安装完成后,pip freeze就能正常显示这个包,后续升级或卸载也能直接用pip操作,更省心。

补充说明

Python能导入cv2是因为它在/usr/local/lib/python3.6/dist-packages这个目录下——这是Python默认的第三方库搜索路径之一,所以不管是不是pip安装的,只要在这个路径里,Python都能找到。但pip的包管理只记录自己安装的包,这就是为什么会出现“能导入但pip freeze看不到”的矛盾情况。

内容的提问来源于stack exchange,提问作者mrgloom

火山引擎 最新活动