Docker-py: 'ImportError: No module named ssl_match_hostname' upon 'import docker' in a Python script

Created on 9 Mar 2017  Â·  40Comments  Â·  Source: docker/docker-py

In a script ~/Documents/Scratch/test_import_docker.py with the single statement import docker, I'm getting the following ImportError:

Traceback (most recent call last):
  File "test_import_docker.py", line 1, in <module>
    import docker
  File "/home/kurt/.local/lib/python2.7/site-packages/docker/__init__.py", line 6, in <module>
    from .client import Client, AutoVersionClient, from_env # flake8: noqa
  File "/home/kurt/.local/lib/python2.7/site-packages/docker/client.py", line 11, in <module>
    from . import api
  File "/home/kurt/.local/lib/python2.7/site-packages/docker/api/__init__.py", line 2, in <module>
    from .build import BuildApiMixin
  File "/home/kurt/.local/lib/python2.7/site-packages/docker/api/build.py", line 9, in <module>
    from .. import utils
  File "/home/kurt/.local/lib/python2.7/site-packages/docker/utils/__init__.py", line 2, in <module>
    from .utils import (
  File "/home/kurt/.local/lib/python2.7/site-packages/docker/utils/utils.py", line 19, in <module>
    from .. import tls
  File "/home/kurt/.local/lib/python2.7/site-packages/docker/tls.py", line 5, in <module>
    from .ssladapter import ssladapter
  File "/home/kurt/.local/lib/python2.7/site-packages/docker/ssladapter/__init__.py", line 1, in <module>
    from .ssladapter import SSLAdapter # flake8: noqa
  File "/home/kurt/.local/lib/python2.7/site-packages/docker/ssladapter/ssladapter.py", line 21, in <module>
    from backports.ssl_match_hostname import match_hostname
ImportError: No module named ssl_match_hostname

Strangely, I am able to import docker from iPython:

Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
Type "copyright", "credits" or "license" for more information.

IPython 2.4.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import docker

In [2]: 

Why is the import not working in the first case?

My Docker version from the command line is:

kurt@kurt-ThinkPad:~$ docker --version
Docker version 1.12.3, build 6b644ec

whereas the version in Python is

In [3]: docker.version
Out[3]: '1.10.3'

Incidentally, I've also created a StackOverflow question about this.

Most helpful comment

I just had this fun issue while setting up my Ubuntu 18.x machine. docker-compose was working for me, then this morning I tried to do some additional installation of some libraries, specifically using python3.6 and suddenly my docker-compose and docker wasn't working.

I eventually figured out that the version of backports that python2 was trying to import was here:
/usr/lib/python2.7/dist-packages/backports

Even though I had another version of it here:
/usr/local/lib/python2.7/dist-packages/backports

So I ran:
cp -r /usr/local/lib/python2.7/dist-packages/backports/ssl_match_hostname/ /usr/lib/python2.7/dist-packages/backports

And that fixed it and docker-compose works again.

All 40 comments

whereas the version in Python is

In [3]: docker.version
Out[3]: '1.10.3'

This is the version of library, not docker engine.

When you import docker in IPython, can you print the path of imported package?

In [3]: docker.__file__
Out[3]: '/usr/lib/python3.6/site-packages/docker/__init__.py'

Can you also import ssl_match_hostname in IPython?

In [4]: from backports.ssl_match_hostname import match_hostname

In [5]:

I'm seeing this error in Python 2.7 on Ubuntu 17.04 when docker is installed with pip install --user docker. There the "backports" module reports as being:

backports

with the __path__ of that pointing to /usr/lib/python2.7/dist-packages/backports while the backports that includes the code you are expecting is in ~/.local/lib/python2.7/site-packages/backports

This seems like a fundamental problem with the backports module/package idea when used with --user mode installation of docker and its dependencies. Possibly backports could be fixed to allow for this type of usage, but I can confirm that docker does import if you install it into a virtualenv instead of doing --user installation.

I have the same problem just now. After I just updatting docker ,everything becomes OK.

I've got the same problem and ran sudo pip install --upgrade docker and it worked :)

I've got the same problem now.
OS: macOS 10.12.3
Python Version:Python 2.7.13 (default, Jun 26 2017, 20:06:48)
Docker Version: Docker version 17.09.0-ce, build afdb6d4

$ pip show docker
Name: docker
Version: 2.5.0
Summary: A Python library for the Docker Engine API.
Home-page: https://github.com/docker/docker-py
Author: Joffrey F
Author-email: [email protected]
License: Apache License 2.0
Location: /usr/local/lib/python2.7/site-packages
Requires: docker-pycreds, requests, backports.ssl-match-hostname, ipaddress, six, websocket-client

$ python
Python 2.7.13 (default, Jun 26 2017, 20:06:48)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

import docker
Traceback (most recent call last):
File "", line 1, in
File "/usr/local/lib/python2.7/site-packages/docker/__init__.py", line 2, in
from .api import APIClient
File "/usr/local/lib/python2.7/site-packages/docker/api/__init__.py", line 2, in
from .client import APIClient
File "/usr/local/lib/python2.7/site-packages/docker/api/client.py", line 11, in
from .build import BuildApiMixin
File "/usr/local/lib/python2.7/site-packages/docker/api/build.py", line 9, in
from .. import utils
File "/usr/local/lib/python2.7/site-packages/docker/utils/__init__.py", line 2, in
from .build import tar, exclude_paths
File "/usr/local/lib/python2.7/site-packages/docker/utils/build.py", line 5, in
from .utils import create_archive
File "/usr/local/lib/python2.7/site-packages/docker/utils/utils.py", line 18, in
from .. import tls
File "/usr/local/lib/python2.7/site-packages/docker/tls.py", line 5, in
from .transport import SSLAdapter
File "/usr/local/lib/python2.7/site-packages/docker/transport/__init__.py", line 3, in
from .ssladapter import SSLAdapter
File "/usr/local/lib/python2.7/site-packages/docker/transport/ssladapter.py", line 21, in
from backports.ssl_match_hostname import match_hostname
ImportError: No module named ssl_match_hostname

Hi @fjhaveri. Have you tried pip install --upgrade docker? How is your pip list?

I'm facing a similar error with Docker python image - I'm using Windows machine with latest version of Docker Edge - i get this error:
ImportError: No module named XXXXXX

I'm getting this when I try to do a pip install --user docker-compose:

'''
$ pip install --user docker-compose
Collecting docker-compose
Using cached docker_compose-1.19.0-py2.py3-none-any.whl
Collecting websocket-client<1.0,>=0.32.0 (from docker-compose)
Using cached websocket_client-0.46.0-py2.py3-none-any.whl
Collecting backports.ssl-match-hostname>=3.5; python_version < "3.5" (from docker-compose)
Using cached backports.ssl_match_hostname-3.5.0.1.tar.gz
Collecting PyYAML<4,>=3.10 (from docker-compose)
Using cached PyYAML-3.12.tar.gz
Collecting dockerpty<0.5,>=0.4.1 (from docker-compose)
Using cached dockerpty-0.4.1.tar.gz
Collecting ipaddress>=1.0.16; python_version < "3.3" (from docker-compose)
Using cached ipaddress-1.0.19.tar.gz
Collecting docopt<0.7,>=0.6.1 (from docker-compose)
Using cached docopt-0.6.2.tar.gz
Collecting enum34<2,>=1.0.4; python_version < "3.4" (from docker-compose)
Using cached enum34-1.1.6-py2-none-any.whl
Collecting docker<3.0,>=2.7.0 (from docker-compose)
Using cached docker-2.7.0-py2.py3-none-any.whl
Collecting requests!=2.11.0,!=2.12.2,!=2.18.0,<2.19,>=2.6.1 (from docker-compose)
Using cached requests-2.18.4-py2.py3-none-any.whl
Collecting texttable<0.10,>=0.9.0 (from docker-compose)
Using cached texttable-0.9.1.tar.gz
Collecting cached-property<2,>=1.2.0 (from docker-compose)
Using cached cached_property-1.3.1-py2.py3-none-any.whl
Collecting jsonschema<3,>=2.5.1 (from docker-compose)
Using cached jsonschema-2.6.0-py2.py3-none-any.whl
Collecting six<2,>=1.3.0 (from docker-compose)
Using cached six-1.11.0-py2.py3-none-any.whl
Collecting docker-pycreds>=0.2.1 (from docker<3.0,>=2.7.0->docker-compose)
Using cached docker_pycreds-0.2.1-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests!=2.11.0,!=2.12.2,!=2.18.0,<2.19,>=2.6.1->docker-compose)
Using cached certifi-2018.1.18-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests!=2.11.0,!=2.12.2,!=2.18.0,<2.19,>=2.6.1->docker-compose)
Using cached chardet-3.0.4-py2.py3-none-any.whl
Collecting idna<2.7,>=2.5 (from requests!=2.11.0,!=2.12.2,!=2.18.0,<2.19,>=2.6.1->docker-compose)
Using cached idna-2.6-py2.py3-none-any.whl
Collecting urllib3<1.23,>=1.21.1 (from requests!=2.11.0,!=2.12.2,!=2.18.0,<2.19,>=2.6.1->docker-compose)
Using cached urllib3-1.22-py2.py3-none-any.whl
Collecting functools32; python_version == "2.7" (from jsonschema<3,>=2.5.1->docker-compose)
Using cached functools32-3.2.3-2.zip
Installing collected packages: six, websocket-client, backports.ssl-match-hostname, PyYAML, dockerpty, ipaddress, docopt, enum34, docker-pycreds, certifi, chardet, idna, urllib3, requests, docker, texttable, cached-property, functools32, jsonschema, docker-compose
Running setup.py install for backports.ssl-match-hostname ... error
Complete output from command /usr/bin/python2 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-WGvE7j/backports.ssl-match-hostname/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('rn', 'n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-QUZVUK-record/install-record.txt --single-version-externally-managed --compile --user --prefix=:
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/backports
copying backports/__init__.py -> build/lib/backports
creating build/lib/backports/ssl_match_hostname
copying backports/ssl_match_hostname/__init__.py -> build/lib/backports/ssl_match_hostname
running install_lib
creating /home/myusername/.local/lib/python2.7/site-packages/backports
copying build/lib/backports/__init__.py -> /home/myusername/.local/lib/python2.7/site-packages/backports
creating /home/myusername/.local/lib/python2.7/site-packages/backports/ssl_match_hostname
copying build/lib/backports/ssl_match_hostname/__init__.py -> /home/myusername/.local/lib/python2.7/site-packages/backports/ssl_match_hostname
byte-compiling /home/myusername/.local/lib/python2.7/site-packages/backports/__init__.py to __init__.pyc
byte-compiling /home/myusername/.local/lib/python2.7/site-packages/backports/ssl_match_hostname/__init__.py to __init__.pyc
running install_egg_info
running egg_info
creating backports.ssl_match_hostname.egg-info
writing backports.ssl_match_hostname.egg-info/PKG-INFO
writing top-level names to backports.ssl_match_hostname.egg-info/top_level.txt
writing dependency_links to backports.ssl_match_hostname.egg-info/dependency_links.txt
writing manifest file 'backports.ssl_match_hostname.egg-info/SOURCES.txt'
warning: manifest_maker: standard file '-c' not found

reading manifest file 'backports.ssl_match_hostname.egg-info/SOURCES.txt'
writing manifest file 'backports.ssl_match_hostname.egg-info/SOURCES.txt'
Copying backports.ssl_match_hostname.egg-info to /home/myusername/.local/lib/python2.7/site-packages/backports.ssl_match_hostname-3.5.0.1-py2.7.egg-info
running install_scripts
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/tmp/pip-build-WGvE7j/backports.ssl-match-hostname/setup.py", line 33, in <module>
    packages=['backports', 'backports.ssl_match_hostname'],
  File "/usr/lib64/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/usr/lib64/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/usr/lib64/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/usr/lib/python2.7/site-packages/setuptools/command/install.py", line 53, in run
    return _install.run(self)
  File "/usr/lib64/python2.7/distutils/command/install.py", line 575, in run
    self.run_command(cmd_name)
  File "/usr/lib64/python2.7/distutils/cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "/usr/lib64/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/usr/lib/python2.7/site-packages/setuptools/command/install_scripts.py", line 15, in run
    from setuptools.command.easy_install import get_script_args
  File "/usr/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 49, in <module>
    from setuptools.package_index import PackageIndex
  File "/usr/lib/python2.7/site-packages/setuptools/package_index.py", line 14, in <module>
    from setuptools import ssl_support
  File "/usr/lib/python2.7/site-packages/setuptools/ssl_support.py", line 85, in <module>
    from backports.ssl_match_hostname import CertificateError, match_hostname
ImportError: No module named ssl_match_hostname

----------------------------------------

Command "/usr/bin/python2 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-WGvE7j/backports.ssl-match-hostname/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('rn', 'n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-QUZVUK-record/install-record.txt --single-version-externally-managed --compile --user --prefix=" failed with error code 1 in /tmp/pip-build-WGvE7j/backports.ssl-match-hostname/
'''

The following workaround worked for me (sudo pip install --upgrade docker didn't):

sudo cp -r ~/.local/lib/python2.7/site-packages/backports/ssl_match_hostname/ /usr/lib/python2.7/dist-packages/backports

I had the same problem on my ubuntu 17.04.
I solved it by installing via apt get

sudo pip uninstall docker docker-compose
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install docker docker-compose

On Ubuntu 17.10, a workaround is to uninstall docker python module with pip and install python-docker with apt:

# pip uninstall docker
...
# apt install python-docker
...
# python2 -c 'import docker; print(docker.__version__)'
2.5.1

On Ubuntu 17.10, a much better workaround is to use a virtualenv.

# virtualenv awx-build-virtualenv
Running virtualenv with interpreter /usr/bin/python2
New python executable in awx-build-virtualenv/bin/python2
Also creating executable in awx-build-virtualenv/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
# source awx-build-virtualenv/bin/activate
(awx-build-virtualenv) # pip install docker
Collecting docker
  Using cached docker-3.1.1-py2.py3-none-any.whl
Collecting backports.ssl-match-hostname>=3.5; python_version < "3.5" (from docker)
...
(awx-build-virtualenv) # python2 -c 'import docker; print(docker.__version__)'
3.1.1

On Ubuntu 17.10, outside a virtualenv, it is possible to import docker pip module with downgraded requests pip module (thanks to this thread):

# pip freeze | grep requests
requests==2.18.1
# pip freeze | grep docker
docker==2.7.0
docker-compose==1.19.0
docker-pycreds==0.2.2
dockerpty==0.4.1
# python2 -c 'import docker; print(docker.__version__)'
2.7.0

We are running into the same issue: https://plexguide.com/threads/cant-install-any-containers.1062/#post-5984

3 people reporting it via ansible and there is no good solution

I had the same problem running docker-compose commands (ImportError: No module named ssl_match_hostname). After reinstall docker and docker-compose with apt the docker-compose commands are working, but I still can't import docker with
python -c 'import docker'

you have to like reinstall your box for all the problem to go away

I fixed the issue by removing all my ~/.local/lib/python{2,3}, but maybe it could be fixed by running touch ~/.local/lib/python2/dist-packages/backports/__init___.py.

@jean-christophe-manciot - You were a relentless beast on this. I've been there :0 - Thanks for all the effort! This fixed me on Ubuntu 18.04 as well.

None of the given workarounds worked for me. How can be fix this?

I discovered I had a bad version of backports.functools-lru-cache sitting in my .local folder conflicting with the globally installed pip packages.

So uninstalling that seemed to help.

I just had this fun issue while setting up my Ubuntu 18.x machine. docker-compose was working for me, then this morning I tried to do some additional installation of some libraries, specifically using python3.6 and suddenly my docker-compose and docker wasn't working.

I eventually figured out that the version of backports that python2 was trying to import was here:
/usr/lib/python2.7/dist-packages/backports

Even though I had another version of it here:
/usr/local/lib/python2.7/dist-packages/backports

So I ran:
cp -r /usr/local/lib/python2.7/dist-packages/backports/ssl_match_hostname/ /usr/lib/python2.7/dist-packages/backports

And that fixed it and docker-compose works again.

@msholty-fd I'm having the same issue with a clean install of Ubuntu 18.04.

What could cause this?

Run bash command is a good solution :
mv ~/.local ~/.local.bak

I'm confronting the same issue and tried to fix it during 12 hours but no fixes found in Ubuntu 18.xx ,

Any one have some suggestions ?

@Nick1211 when you are talking abou ~/.local you mean /local/ ?

because in my /root/.local it's empty 😕

@jean-christophe-manciot How you have fixed this issue on Ubuntu 18.10 ? I'm under a vps and i have this issue also, so if you have any suggestion to fix this issue everything is welcome.

I Have tried to reintal with pip and unistall the pip docker and install it again with aptitude but nothing, the issue still here.

As i have reported here also, https://github.com/Admin9705/PlexGuide.com-The-Awesome-Plex-Server/issues/725

Rgds

$ sudo pip uninstall backports.ssl_match_hostname
and then install the docker-py with

$ sudo pip install docker-py

@nischay30 something is clearly not right about your recommandation because docker-py is the old/outdated name of the pip package. We are supposed to use just simple docker.

*docker-py had last release back in 2016, is not maintained *.

After doing more testing I was able to find a way to avoid this problem by patching requirments with:

backports.ssl-match-hostname>=3.7.1; python_version=='2.7'  # PSF
# ^ workaround for https://github.com/docker/docker-py/issues/1502

If you miss to add this line, you may endup with a broken docker container on those systems that happen to have an older versions of backports.ssl-match-hostname.

Note: I am not sure which is the first version that avoids this bug but the latest one that I used worked.

Ran into the very same problem with a freshly installed Ubuntu 18.10

Edit: what worked for us is to use python3 and ensure the latest version of python module docker is installed (4.0.1 as of today)

sudo apt-get install python3
pip3 --upgrade docker

# pip3 list | grep docker
docker (4.0.1)
docker-compose (1.24.0)
docker-pycreds (0.4.0)
dockerpty (0.4.1)


# Eventually use this variable with Ansible if you're going to use python module docker with a playbook :
ansible_python_interpreter: /usr/bin/python3

The same problem on Ubuntu 18.10 appeared some time after I updated Python 3.

It's solved by re-installing Docker and Docker Compose:

sudo -H python -m pip uninstall docker docker-compose
sudo apt update
sudo apt upgrade -y
sudo apt install docker-ce docker-compose

If docker-compose still fails to start, follow the installation instructions directly from the Docker documentation: https://docs.docker.com/compose/install/

verify Docker and Docker Compose:

docker --version
docker-compose --version

I randomly got this problem after upgrading on Ubuntu 18.04. It broke automation on all servers running python commands on the docker engine.

I just ran into this after installing docker-compose, and at least on the host I was looking at (a new Debian buster installation), the cause came down to an OS package (python-configparser) shipping files under /usr/lib/python2.7/dist-packages/backports. Because of the ordering of Python's sys.path (and I suppose the semantics of submodules), this prevents Python from looking in /usr/local/lib/python2.7/dist-packages/backports (note local in this path), where pip installed the files for backports.ssl-match-hostname.

To anyone else hitting this bug, check whether the path you see via introspection on the backports module matches the path pip installed files under:

# pip show -f backports.ssl-match-hostname
Name: backports.ssl-match-hostname
[...]
Location: /usr/local/lib/python2.7/dist-packages
Requires:
Required-by: docker, docker-compose
Files:
  backports.ssl_match_hostname-3.7.0.1.dist-info/INSTALLER
  backports.ssl_match_hostname-3.7.0.1.dist-info/LICENSE.txt
  backports.ssl_match_hostname-3.7.0.1.dist-info/METADATA
  backports.ssl_match_hostname-3.7.0.1.dist-info/RECORD
  backports.ssl_match_hostname-3.7.0.1.dist-info/WHEEL
  backports.ssl_match_hostname-3.7.0.1.dist-info/top_level.txt
  backports/__init__.py
  backports/__init__.pyc
  backports/ssl_match_hostname/__init__.py
  backports/ssl_match_hostname/__init__.pyc

# python -c 'import backports ; print(backports.__path__)'
['/usr/lib/python2.7/dist-packages/backports']

The above shows the backports module that Python found on import is not the same as the one the ssl_match_hostname submodule is nested under.

I found two possible fixes for my host's environment, though I'd expect the fix is going to vary depending on the specific thing that is confusing the search path.

  1. Uninstall pip's backports.ssl-match-hostname, and install Debian's python-backports.ssl-match-hostname package (this is the approach I went with)
  2. Remove Debian's python-configparser package (which will probably have the effect of removing some other packages that depend on it)

Thanks @DrewBloechl - option 1 worked for me also!!!

Another +1 to @DrewBloechl — on my Raspberry Pi 4 running Debian Buster, it seems the default install had python-configparser installed. Uninstalling it fixed docker-compose by allowing the ssl_match_hostname module to load in a path Python could see. My fix was:

$ sudo apt-get remove python-configparser

Edit: following up, I actually went with step 1 instead. I just make sure to apt-get install -y python-backports.ssl-match-hostname prior to Pip installation (Pip (python-pip package) seems to be what causes the python-configparser package to be installed, at least in my case).

@geerlingguy I had the same issue on a VPS running Debian Buster (amd64), which was previously working fine when using Stretch.

I just make sure to apt-get install -y python-backports.ssl-match-hostname prior to Pip installation (Pip (python-pip package) seems to be what causes the python-configparser package to be installed, at least in my case).

Installing in this order also fixed it for me!

On Ubuntu 17.10, a workaround is to uninstall docker python module with pip and install python-docker with apt:

# pip uninstall docker
...
# apt install python-docker
...
# python2 -c 'import docker; print(docker.__version__)'
2.5.1

Worked for me on Ubuntu 18.04. The exact commands:
sudo pip uninstall docker
sudo apt-get install python-docker

in my case i solved it with
apt install python-backports.ssl-match-hostname

A packages should never depend on a specific sort order of installing packages.

In my opinion the docker-compose package should state that it is incompatible with python-configparser.

I am on Ubuntu 19.10 and i love to use package managers (like pip) as it enables me to run vulnerability scanners. A binary which is not installed by using a package manager is most often not scanned by vulnerability scanners. That is the reason why i avoid using curl-based installations. In the above context the pip package can not state (as far as i know) that it is incompatible to a package of another package manager (dep / apt). I would love to see a debian / ubuntu package of docker-compose available which then should have a incompatibility statement to package python-configparser.

Maybe an python expert can tell use how to install docker-compose in a virtual environment using pip - as an alternative to OS-packages.

@rafabc solution worked for me!

On Ubuntu 17.10, a workaround is to uninstall docker python module with pip and install python-docker with apt:

# pip uninstall docker
...
# apt install python-docker
...
# python2 -c 'import docker; print(docker.__version__)'
2.5.1

This worked for me

Let me explain the root cause of the issue.
python looks for 'backports' directory, when it is found, python looks for 'ssl_match_hostname' subdirectory. If it is not found, it is an error.
In other words if one has '/usr/lib.../backports' and no '/usr/lib.../backports/ssl_match_hostname' (any backport installed by apt), it is pointless to use pip to install anything in /usr/local/lib or in /home.

If we have a collision between distro and pip:

  1. dpkg-query -S /usr/lib/python2.7/dist-packages/backports
  2. apt remove all_found_packages
  3. pip install whatever_you_need

If we have a collision between global and local pip do similar things.

It is handy to use strace to solve such issues.

I just had this fun issue while setting up my Ubuntu 18.x machine. docker-compose was working for me, then this morning I tried to do some additional installation of some libraries, specifically using python3.6 and suddenly my docker-compose and docker wasn't working.

I eventually figured out that the version of backports that python2 was trying to import was here:
/usr/lib/python2.7/dist-packages/backports

Even though I had another version of it here:
/usr/local/lib/python2.7/dist-packages/backports

So I ran:
cp -r /usr/local/lib/python2.7/dist-packages/backports/ssl_match_hostname/ /usr/lib/python2.7/dist-packages/backports

And that fixed it and docker-compose works again.

I just tried everything but this worked for me.Thank You so much

Was this page helpful?
0 / 5 - 0 ratings