Para usar el SDK de Docker para Python , intento import docker
en una secuencia de comandos de Python, pero el resultado es un error de ImportError
con el siguiente rastreo:
Traceback (most recent call last): File "/home/kurt/dev/clones8/ipercron-compose/furion/iclib/tests/test_utils/docker_utils.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 [Finished in 0.2s with exit code 1] [shell_cmd: python -u "/home/kurt/dev/clones8/ipercron-compose/furion/iclib/tests/test_utils/docker_utils.py"] [dir: /home/kurt/dev/clones8/ipercron-compose/furion/iclib/tests/test_utils] [path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin]
Lo extraño es que la importación funciona en otros lugares, por ejemplo, en un indicador de 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]:
¿Por qué la importación no funciona en el primer caso?
La actualización de la ventana acoplable no resolvió el problema para mí. En cambio, tuve que instalar los backports como paquete de Ubuntu (y desinstalarlos desde pip):
sudo pip uninstall backports.ssl-match-hostname sudo apt-get install python-backports.ssl-match-hostname
En Ubuntu/Debian, hay un error relacionado con la actualización del paquete ( error #893520 ) en este momento, en el que no se genera el archivo __init__.py
.
Compruebe si existe el siguiente archivo: /usr/lib/python2.7/dist-packages/backports/__init__.py
Si no existe y el paquete python-backports.ssl-match-hostname
está instalado, ejecute el siguiente comando para generar el archivo que falta:
sudo pycompile -p python-backports.ssl-match-hostname
Tenía backports.ssl-match-hostname
instalado localmente, lo que impedía que se instalara a nivel del sistema. lo resolvi por
sudo pip uninstall backports.ssl-match-hostname
seguido por
sudo pip install --upgrade docker