如何让pip识别已通过源码编译安装的OpenCV?
让pip识别源码编译安装的OpenCV
我之前也遇到过一模一样的问题——源码编译带CUDA的OpenCV后Python能正常导入使用,但pip死活不认它,导致安装其他依赖包时总是自动下载安装另一个OpenCV版本,搞得环境乱糟糟的。下面是几个亲测有效的解决办法:
核心原因
pip是通过Pythonsite-packages目录里的.dist-info或.egg-info文件夹来识别已安装包的,而源码编译安装的OpenCV不会自动生成这些标识目录,所以pip根本不知道它已经存在于环境中。
解决办法
方法1:手动创建pip识别的包信息目录(推荐)
这个方法能让pip永久识别到你的OpenCV版本,一劳永逸:
- 先找到你的Python环境的
site-packages路径:
打开Python交互环境执行:
你会得到类似import site print(site.getsitepackages())['/usr/local/lib/python3.7/site-packages']的路径,把它记下来。 - 进入这个目录,创建对应版本的
.dist-info文件夹:
比如你的OpenCV是4.3.0版本,就执行:cd /usr/local/lib/python3.7/site-packages mkdir opencv-python-4.3.0.dist-info - 在这个文件夹里创建
METADATA文件,写入基础的包信息:
做完这步再跑cat > opencv-python-4.3.0.dist-info/METADATA << EOF Metadata-Version: 2.1 Name: opencv-python Version: 4.3.0 Summary: OpenCV Python bindings Home-page: https://opencv.org/ Author: OpenCV team License: BSD Description: OpenCV (Open Source Computer Vision Library) is an open source computer vision and machine learning software library. EOFpip list,你就能看到opencv-python出现在列表里了,后续安装依赖时pip会直接跳过它。
方法2:临时跳过依赖安装
如果只是应付这次的requirements.txt安装,可以用--no-deps参数让pip不自动安装任何依赖:
pip install --no-deps -r requirements.txt
不过要注意,这个参数会跳过所有依赖的安装,所以如果你的其他包还有别的依赖项,得手动去安装这些依赖,适合依赖关系比较简单的场景。
方法3:修改requirements.txt
在你的requirements.txt里添加一行:
opencv-python==4.3.0
配合方法1使用的话,pip会检测到这个版本已经安装,就不会再下载新的了。如果没做方法1,这行还是会触发新的安装,所以这个方法要和方法1搭配使用才有效。
内容的提问来源于stack exchange,提问作者Tanja Bayer
相关产品推荐
相关产品推荐

