96

I have a docker image that I need to install openCV in it and from yesterday it started to fail because it cannot find the "skbuild" module:

Step 12/24 : RUN pip install opencv-python opencv-contrib-python
 ---> Running in a0f746a23aed
Collecting opencv-python
  Downloading https://files.pythonhosted.org/packages/77/f5/49f034f8d109efcf9b7e98fbc051878b83b2f02a1c73f92bbd37f317288e/opencv-python-4.4.0.42.tar.gz (88.9MB)
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-cciracwm/opencv-python/setup.py", line 9, in <module>
        import skbuild
    ModuleNotFoundError: No module named 'skbuild'

And on the host also I cannot find that module and pip search is either return nothing or returns a server error:

sudo pip3 search skbuild
WARNING: The directory '/home/ali/.cache/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
ERROR: Exception:
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/pip/_internal/cli/base_command.py", line 216, in _main
    status = self.run(options, args)
  File "/usr/local/lib/python3.6/dist-packages/pip/_internal/commands/search.py", line 60, in run
    pypi_hits = self.search(query, options)
  File "/usr/local/lib/python3.6/dist-packages/pip/_internal/commands/search.py", line 80, in search
    hits = pypi.search({'name': query, 'summary': query}, 'or')
  File "/usr/lib/python3.6/xmlrpc/client.py", line 1112, in __call__
    return self.__send(self.__name, args)
  File "/usr/lib/python3.6/xmlrpc/client.py", line 1452, in __request
    verbose=self.__verbose
  File "/usr/local/lib/python3.6/dist-packages/pip/_internal/network/xmlrpc.py", line 45, in request
    return self.parse_response(response.raw)
  File "/usr/lib/python3.6/xmlrpc/client.py", line 1342, in parse_response
    return u.close()
  File "/usr/lib/python3.6/xmlrpc/client.py", line 656, in close
    raise Fault(**self._stack[0])
xmlrpc.client.Fault: <Fault -32403: 'server error; service unavailable'>

Is this because their server has some problems or it is related to my pip?

Update

I tried it on different python and pip versions, python versions 3.6 and 3.7 and pip version 19.12 and 20.2.2 and 9.0.1 (the one inside image).

Update 2

I added pip install scikit-build one step before opencv installation but I get another error related to cmake:

Step 12/25 : RUN pip install scikit-build
 ---> Running in afe0c5c0fca0
Collecting scikit-build
  Downloading https://files.pythonhosted.org/packages/78/c9/7c2c7397ea64e36ebb292446896edcdecbb8c1aa6b9a1a32f6f67984c3df/scikit_build-0.11.1-py2.py3-none-any.whl (72kB)
Collecting packaging (from scikit-build)
  Downloading https://files.pythonhosted.org/packages/46/19/c5ab91b1b05cfe63cccd5cfc971db9214c6dd6ced54e33c30d5af1d2bc43/packaging-20.4-py2.py3-none-any.whl
Requirement already satisfied: wheel>=0.29.0 in /usr/lib/python3/dist-packages (from scikit-build)
Collecting distro (from scikit-build)
  Downloading https://files.pythonhosted.org/packages/25/b7/b3c4270a11414cb22c6352ebc7a83aaa3712043be29daa05018fd5a5c956/distro-1.5.0-py2.py3-none-any.whl
Requirement already satisfied: setuptools>=28.0.0; python_version >= "3" in /usr/lib/python3/dist-packages (from scikit-build)
Requirement already satisfied: six in /usr/lib/python3/dist-packages (from packaging->scikit-build)
Collecting pyparsing>=2.0.2 (from packaging->scikit-build)
  Downloading https://files.pythonhosted.org/packages/8a/bb/488841f56197b13700afd5658fc279a2025a39e22449b7cf29864669b15d/pyparsing-2.4.7-py2.py3-none-any.whl (67kB)
Installing collected packages: pyparsing, packaging, distro, scikit-build
Successfully installed distro-1.5.0 packaging-20.4 pyparsing-2.4.7 scikit-build-0.11.1
Removing intermediate container afe0c5c0fca0
 ---> 533658ddf26d
Step 13/25 : RUN pip install opencv-python opencv-contrib-python
 ---> Running in 0f2c03bc042a
Collecting opencv-python
  Downloading https://files.pythonhosted.org/packages/77/f5/49f034f8d109efcf9b7e98fbc051878b83b2f02a1c73f92bbd37f317288e/opencv-python-4.4.0.42.tar.gz (88.9MB)
Collecting opencv-contrib-python
  Downloading https://files.pythonhosted.org/packages/48/98/05bd8e00c71b66c4e7847cc051cac404191d904df58b51a7dcc3767ff747/opencv_contrib_python-4.2.0.34-cp37-cp37m-manylinux1_x86_64.whl (34.2MB)
Collecting numpy>=1.14.5 (from opencv-python)
  Downloading https://files.pythonhosted.org/packages/3d/d1/90cd7e0b27ee86d77f5386d38b74520486100286d50772377791b6ef22ff/numpy-1.19.1-cp37-cp37m-manylinux1_x86_64.whl (13.4MB)
Building wheels for collected packages: opencv-python
  Running setup.py bdist_wheel for opencv-python: started
  Running setup.py bdist_wheel for opencv-python: finished with status 'error'
  Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-w49xv99a/opencv-python/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/tmpycj03zlwpip-wheel- --python-tag cp37:
  /usr/lib/python3.7/distutils/dist.py:274: UserWarning: Unknown distribution option: 'long_description_content_type'
    warnings.warn(msg)
  Traceback (most recent call last):
    File "/usr/local/lib/python3.7/dist-packages/skbuild/setuptools_wrap.py", line 560, in setup
      cmkr = cmaker.CMaker(cmake_executable)
    File "/usr/local/lib/python3.7/dist-packages/skbuild/cmaker.py", line 95, in __init__
      self.cmake_version = get_cmake_version(self.cmake_executable)
    File "/usr/local/lib/python3.7/dist-packages/skbuild/cmaker.py", line 82, in get_cmake_version
      "Problem with the CMake installation, aborting build. CMake executable is %s" % cmake_executable)
  
  Problem with the CMake installation, aborting build. CMake executable is cmake
  
  ----------------------------------------
  Failed building wheel for opencv-python
  Running setup.py clean for opencv-python
Failed to build opencv-python
Installing collected packages: numpy, opencv-python, opencv-contrib-python
  Found existing installation: numpy 1.13.3
    Not uninstalling numpy at /usr/lib/python3/dist-packages, outside environment /usr
  Running setup.py install for opencv-python: started
    Running setup.py install for opencv-python: finished with status 'error'
    Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-w49xv99a/opencv-python/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-maky1uyw-record/install-record.txt --single-version-externally-managed --compile:
    /usr/lib/python3.7/distutils/dist.py:274: UserWarning: Unknown distribution option: 'long_description_content_type'
      warnings.warn(msg)
    Traceback (most recent call last):
      File "/usr/local/lib/python3.7/dist-packages/skbuild/setuptools_wrap.py", line 560, in setup
        cmkr = cmaker.CMaker(cmake_executable)
      File "/usr/local/lib/python3.7/dist-packages/skbuild/cmaker.py", line 95, in __init__
        self.cmake_version = get_cmake_version(self.cmake_executable)
      File "/usr/local/lib/python3.7/dist-packages/skbuild/cmaker.py", line 82, in get_cmake_version
        "Problem with the CMake installation, aborting build. CMake executable is %s" % cmake_executable)
    
    Problem with the CMake installation, aborting build. CMake executable is cmake
Daniel
  • 21
  • 4
AVarf
  • 4,481
  • 9
  • 47
  • 74
  • 4
    I'm having a similar problem. When I `pip install opencv-python` it errors out with a similar message `Problem with the CMake installation, aborting build. CMake executable is cmake`. Regarding the answers so far, this is after having updated pip (to 20.2.2), installed scikit-build, and installed cmake. – smackcrane Aug 22 '20 at 18:55
  • (And updated setuptools). – smackcrane Aug 22 '20 at 19:04
  • If you do not need brand new features, consider installing a slightly old version. https://github.com/openvinotoolkit/dlstreamer_gst/issues/105#issuecomment-684177233 – A.Ametov Jan 13 '21 at 08:55
  • 8
    Googlers, try `sudo pip3 install --upgrade pip` and then `pip3` as usual (instead of `pip` equivalents). – rinogo Mar 25 '21 at 17:05

10 Answers10

149

If you read the opencv-python package FAQ in PyPI, it clearly provides an answer for this specific issue: you must run pip install --upgrade pip. Check pip version afterwards with pip -V.

This is because your pip is too old to understand the new manylinux2014 package format and tries to compile from source. That will also fail because pip is too old to understand how to use pyproject.toml to install build dependencies such as scikit-build.

Another issue I'm spotting is that you install both opencv-python and opencv-contrib-python. You should not do this. It's also explained in the PyPI page of the packages. Most likely you should be using just opencv-contrib-python-headless package since you are using Docker and I assume you do not use the GUI functionalities of OpenCV.

skvark
  • 2,193
  • 2
  • 16
  • 12
  • I didn't mention this explicitly but I already updated my pip on both host and inside the image and the 20.2.2 version is from there and didn't work. We were installing both `opencv-python` and `opencv-contrib-python` for a long time and we never had a problem before but why we need both I don't know since my colleague who is the owner of this repo is on holiday. – AVarf Aug 17 '20 at 20:35
  • Host pip has nothing to do with Docker. Did you confirm that the version was => 19.3 in the Docker image before running the installs? You don't need both, because the second one always overwrites the first one and you end up with inconsistent environment. – skvark Aug 18 '20 at 08:41
  • I know host pip has nothing to do with the docker but as I mentioned in my question I have this problem also on my host and both on the host and inside the container, I confirmed that the pipe version is 20.2.2. Thank you for the tip, I will tell this to my colleague. – AVarf Aug 18 '20 at 09:15
  • There is definetely something odd going on with the Docker environment since the other package uses the old pre-built manylinux1 package and other downloads the source distribution (from you output): opencv-python-4.4.0.42.tar.gz (88.9MB) opencv_contrib_python-4.2.0.34-cp37-cp37m-manylinux1_x86_64.whl – skvark Aug 18 '20 at 09:50
32

just update the pip and it will work

python -m pip install --upgrade pip
H.ELKASRI
  • 321
  • 3
  • 2
27

Just update pip. If you use python3 then:

pip3 install --upgrade pip
pip3 install opencv-python
24

skbuild is for Scikit-build.

Install it using pip:

As for windows: pip install scikit-build

After the succesfull installation:

pip install cmake

Jimit Vaghela
  • 768
  • 1
  • 8
  • 31
15

Since I have python3 installed, I had to use

python3 -m pip install --upgrade pip

Soorya
  • 641
  • 9
  • 16
5

11/may/2021: faced same issue on a fresh ubuntu18 virtualbox image. this worked for me

sudo -H pip3 install --upgrade pip

pip3 install opencv-python
Arun Joshi
  • 47
  • 1
  • 4
1

I also had the error, in my case when executing

python3.7 -m pip install --user opencv-python in order to get catkin_make -j8 working again in a ROS project. Thus, Docker is not needed to get the error.

First the details:

Collecting opencv-python
  Cache entry deserialization failed, entry ignored
  Downloading https://files.pythonhosted.org/packages/30/46/821920986c7ce5bae5518c1d490e520a9ab4cef51e3e54e35094dadf0d68/opencv-python-4.4.0.46.tar.gz (88.9MB)
    100% |████████████████████████████████| 88.9MB 17kB/s 
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-8jky5692/opencv-python/setup.py", line 9, in <module>
        import skbuild
    ModuleNotFoundError: No module named 'skbuild'
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-8jky5692/opencv-python/

Just documenting what I did to solve it:

  • python -m pip install --user opencv-python gives me /usr/bin/python: No module named pip
  • sudo apt install python-pip (in addition to the already existing sudo apt install python3-pip installation for pip3)
  • python -m pip -V now gives me pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)
  • pip -V gives me pip 20.3.3 from /home/MYUSERNAME/.local/lib/python3.6/site-packages/pip (python 3.6) (because apt-get installs a standard 3.6, independently from existing python versions)
  • sudo apt-get update && sudo apt-get install cmake libopenmpi-dev python3.7-dev zlib1g-dev (not sure if this step is needed)
  • pip install opencv-python WORKING
  • catkin_make -j8 in my catkin workspace in the Python base environment WORKING

Additional hints for the cmake error that is mentioned in the Update 2

This cmake error is perhaps due to a corrupted workspace during or after catkin_make install:

  • I had a similar cmake error when I executed the catkin_make command inside my Python virtual environment. When I changed back to the base environment (using deactivate), catkin_make ran through. This is probably due to dependency issues in the virtual environment, perhaps also because of the version that is used when you use standard python -m that is used by some internal scripts, see one of the bullet points above. I had to assign python2.7 to the python -m pip -V pip version, probably because ROS gazebo needed 2.7.
  • Most promising (if this is a catkin issue): simply remove catkin and install it again, see Error 2 Invoking "make -j4 -l4" failed.
  • Perhaps also see Invoking "cmake" failed.
questionto42
  • 7,175
  • 4
  • 57
  • 90
0

I had a similar problem and what finally worked was to change from python:3-alpine to python:3.8-slim and install python and openCV similar to what has been done in the selected answer here: Minimal SciPy Dockerfile

deisting
  • 21
  • 2
-1

If non of these answers works for you try:

pip3 install opencv-python-headless
Manbus
  • 706
  • 4
  • 9
-3

with python3 you need to use pip3