如何告诉 pip 已经从源代码编译了一个包(opencv)

Tan*_*yer 5 python opencv pip

由于某些特定要求,我需要从源代码编译一个包(支持 cuda 的 opencv)。

成功编译后,我的python环境能够毫无问题地导入opencv:

$ python
Python 3.7.7 (default, Mar 10 2020, 15:16:38) 
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> import cv2
>>> cv2.__version__
'4.3.0'
>>>

Run Code Online (Sandbox Code Playgroud)

但是如果我尝试pip listopencv-python 不是它的一部分:

Package              Version
-------------------- --------
absl-py              0.9.0
astor                0.8.1
dlib                 19.20.99
gast                 0.3.3
google-pasta         0.2.0
grpcio               1.30.0
h5py                 2.10.0
importlib-metadata   1.6.1
Keras-Applications   1.0.8
Keras-Preprocessing  1.1.2
Markdown             3.2.2
numpy                1.19.0
pip                  20.1.1
protobuf             3.12.2
setuptools           47.3.1
six                  1.15.0
tensorboard          1.14.0
tensorflow-estimator 1.14.0
tensorflow-gpu       1.14.0
termcolor            1.1.0
Werkzeug             1.0.1
wheel                0.34.2
wrapt                1.12.1
zipp                 3.1.0

Run Code Online (Sandbox Code Playgroud)

问题是之后我需要通过安装更多包,pip install -r requirements.txt并且requirements.txt中列出的一些包有opencv作为依赖。由于 pip 不知道 opencv 安装,它现在安装了不同的 opencv 版本。将两个不同的版本并排安装对我来说听起来不是一个聪明的解决方案......我可以稍后卸载 pip install opencv 但这似乎也不是一个好的解决方案......

那么如何在运行 pip install 之前让 pip 知道其他 opencv 安装呢?

Jak*_*kub 2

pip编译 opencv 后,您可以使用或来安装软件包python setup.py install。我建议为 opencv+cuda 构建一个 Python 轮,然后安装该轮。如果您需要重新安装或创建新环境,拥有轮子将使安装变得更容易。

一般步骤是:

  1. 编译opencv
  2. 切换到 opencv python 目录(带有 setup.py)并运行python setup.py bdist_wheel
  3. 运行auditwheel repair my-python-wheel-1.5.2-cp35-cp35m-linux_x86_64.whl(更改轮子文件名)(来自/sf/answers/2947422411/

你可以auditwheelpip install auditwheel.

另一个有用的参考是轮子的构建文档opencv-python,可从https://github.com/skvark/opencv-python#build-process获取。您可以将这些步骤修改为您的构建。