Because of some specific requirements I needed to compile a package (opencv with cuda support) from source.
After successfull compilation my python-environment is able to import opencv without a problem:
$ 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' >>>
But if I try pip list
opencv-python is not part of it:
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
The problem is that afterwards I need to install more packages via pip install -r requirements.txt
and some of the packages listed in requirements.txt have opencv as a dependency. As pip is not aware of the opencv installation it now installes a different opencv version. Having two different versions installed along side each other does not sound like a clever solution for me… I could uninstall the pip install opencv later but that does not seem to be a good solution either…
So how can I make pip aware of the other opencv installation before running the pip install?
Advertisement
Answer
After you compile opencv, you can install the package with pip
or python setup.py install
. I would recommend building a Python wheel for opencv+cuda, and then installing that wheel. Having a wheel will make installing easier if you ever need to reinstall or make a new environment.
The general steps are:
- Compile opencv
- Change into the opencv python directory (with setup.py) and run
python setup.py bdist_wheel
- Run
auditwheel repair my-python-wheel-1.5.2-cp35-cp35m-linux_x86_64.whl
(change the wheel filename) (from https://stackoverflow.com/a/42106034/5666087)
You can get auditwheel
with pip install auditwheel
.
Another useful reference is the build documentation for the opencv-python
wheels, available at https://github.com/skvark/opencv-python#build-process. You can modify those steps to your build.