pythondocker-composeshapelygeos

OSError when trying to pip install shapely inside docker container


Could not find library geos_c or load any of its variants ['libgeos_c.so.1', 'libgeos_c.so']

using the python:3.5.1 image I am trying to run a container that includes among other things it installs in requirements.txt shapely. When the docker container tries to install shapely I get the above error.

RUN apt-get install libgeos-dev

was something I saw trying to search the issue but that returns unable to locate package libgeos-dev

summary:

expected conditions: including shapely in the requirements.txt file results ins shapely being installed when the docker container is built actual conditions: An error message is recieved during build Could not find library geos_c or load any of its variants ['libgeos_c.so.1', 'libgeos_c.so']

Steps to reproduce:

use docker-compose to build on

Docker-compose.yml:

app:
        build: ${APP_REPO}

Dockerfile:

FROM python:3.5.1-onbuild

Requirements.txt:

shapely

(Simplified to attempt to isolate issues.)


Solution

  • I found a solution from: https://github.com/calendar42/docker-python-geos/blob/master/Dockerfile

    ENV PYTHONUNBUFFERED 1
    
    #### Install GEOS ####
    # Inspired by: https://hub.docker.com/r/cactusbone/postgres-postgis-sfcgal/~/dockerfile/
    
    ENV GEOS http://download.osgeo.org/geos/geos-3.5.0.tar.bz2
    
    #TODO make PROCESSOR_COUNT dynamic
    #built by docker.io, so reducing to 1. increase to match build server processor count as needed
    ENV PROCESSOR_COUNT 1
    
    WORKDIR /install-postgis
    
    WORKDIR /install-postgis/geos
    ADD $GEOS /install-postgis/geos.tar.bz2
    RUN tar xf /install-postgis/geos.tar.bz2 -C /install-postgis/geos --strip-components=1
    RUN ./configure && make -j $PROCESSOR_COUNT && make install
    RUN ldconfig
    WORKDIR /install-postgis
    

    I copied this into my dockerfile before the line

    pip install requirements.txt
    

    and the shapely install worked.

    It stalls out doing the build occasionally but the main problem was solved.