Saltar al contenido

Instalación de pandas en Docker Alpine

Solución:

Si no está vinculado a Alpine 3.6, el uso de Alpine 3.7 (o posterior) debería funcionar.

En Alpine 3.6, instalando matplotlib falló para mí con lo siguiente:

Collecting matplotlib
  Downloading https://files.pythonhosted.org/packages/26/04/8b381d5b166508cc258632b225adbafec49bbe69aa9a4fa1f1b461428313/matplotlib-3.0.3.tar.gz (36.6MB)
    Complete output from command python setup.py egg_info:
    Download error on https://pypi.org/simple/numpy/: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833) -- Some packages may not be found!
    Couldn't find index page for 'numpy' (maybe misspelled?)
    Download error on https://pypi.org/simple/: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833) -- Some packages may not be found!
    No local packages or working download links found for numpy>=1.10.0

Sin embargo, en Alpine 3.7 funcionó. Esto puede deberse a numpy problema de control de versiones (ver aquí), pero no puedo asegurarlo. Más allá de ese problema, los paquetes se crearon e instalaron con éxito, lo que llevó un buen rato, unos 30 minutos (dado que musl-libc de Alpine no es compatible con el formato Wheels de Python, todos los paquetes instalados con pip deben compilarse desde la fuente).

Tenga en cuenta que se necesita un cambio importante: solo debe eliminar el build-runtime paquete virtualapk del build-runtime) después pip install. Además, si corresponde, puede reemplazar numpy 1.16.1 con 1.16.2, que es la versión enviada (de lo contrario 1.16.2 será desinstalado y 1.16.1 construido a partir de la fuente, lo que aumenta aún más el tiempo de compilación); sin embargo, no he probado esto.

Como referencia, aquí está mi salida de compilación Dockerfile y docker ligeramente modificada.

Nota:

Por lo general, se elige Alpine como base para minimizar el tamaño de la imagen (Alpine también es muy hábil, pero tiene problemas de compatibilidad con las aplicaciones de Linux continental debido a glibc / musl). Tener que construir paquetes de Python a partir de fuentes supera ese propósito, ya que obtienes una imagen muy hinchada: 900 MB antes de cualquier limpieza, que también lleva años construir. La imagen podría compactarse en gran medida eliminando todos los artefactos de compilación intermedios, las dependencias de compilación, etc., pero aún así.

Si no puede obtener las versiones del paquete Python que necesita para trabajar en Alpine, sin tener que compilarlas desde la fuente, le sugiero que pruebe otras imágenes base pequeñas y más compatibles, como debian-slim, o incluso ubuntu.

Editar:

Después de “Editar 3” con requisitos adicionales, aquí se actualizan los resultados de la compilación de Dockerfile y Docker. Se agregaron los siguientes paquetes para satisfacer las dependencias de compilación:

postgresql-dev libffi-dev libressl-dev libxml2 libxml2-dev libxslt libxslt-dev libjpeg-turbo-dev zlib-dev

Para los paquetes que no se pudieron compilar debido a encabezados específicos, utilicé la búsqueda de contenido de paquetes de Alpine para ubicar el paquete que faltaba. Especificamente para cffi, los ffi.h Faltaba el encabezado, que necesita el libffi-dev paquete: https://pkgs.alpinelinux.org/contents?file=ffi.h&path=&name=&branch=v3.7.

Alternativamente, cuando una falla en la construcción de un paquete no es muy clara, las instrucciones de instalación del paquete específico pueden ser referidas, por ejemplo, a Pillow.

El nuevo tamaño de imagen, antes de cualquier compactación, es de 1,04 GB. Para reducirlo un poco, puede eliminar los cachés de Python y pip:

RUN apk del build-runtime && 
    find -type d -name __pycache__ -prune -exec rm -rf {} ; && 
    rm -rf ~/.cache/pip

Esto reducirá el tamaño de la imagen a 661 MB, al usar docker build --squash.

Intente agregar esto a su archivo requirements.txt:

numpy==1.16.0
pandas==0.23.4

He estado enfrentando el mismo error desde ayer y este cambio lo resolvió por mí.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *