【问题标题】:OSError when trying to pip install shapely inside docker container尝试在 docker 容器内均匀安装 pip 时出现 OSError
【发布时间】:2017-01-15 14:49:14
【问题描述】:

找不到库 geos_c 或加载其任何变体 ['libgeos_c.so.1', 'libgeos_c.so']

使用 python:3.5.1 图像我正在尝试运行一个容器,其中包括它安装在 requirements.txt 中的其他内容。当 docker 容器尝试正常安装时,出现上述错误。

运行 apt-get install libgeos-dev

是我在尝试搜索问题时看到的,但返回找不到包 libgeos-dev

总结:

预期条件:在 requirements.txt 文件中包含 shapely 会导致在构建 docker 容器时安装 shapely 实际情况:构建过程中收到错误消息Could not find library geos_c or load any of its variants ['libgeos_c.so.1', 'libgeos_c.so']

重现步骤:

使用 docker-compose 构建

Docker-compose.yml:

app:
        build: ${APP_REPO}

Dockerfile:

FROM python:3.5.1-onbuild

Requirements.txt:

shapely

(简化以尝试隔离问题。)

【问题讨论】:

    标签: python docker-compose shapely geos


    【解决方案1】:

    我找到了解决方案: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
    

    我将它复制到我的 dockerfile 行之前

    pip install requirements.txt
    

    并且匀称的安装工作。

    它偶尔会停止构建,但主要问题已解决。

    【讨论】:

    • 这看起来是正确的,但我认为您也可以为该软件包构建一个轮子并安装它。
    • 我最初调查问题时发现的有关轮文件的内容表明它们是特定于 Windows 的东西,这不是真的吗?
    • 这根本不是真的。它们在 Windows 上更常见,因为 Windows 用户编译东西通常更难(他们并不总是可以轻松访问编译器),而且我相信 pypi 只包含 Windows 轮子。您可以在 linux 和 osx 上构建和使用轮子,但您必须为您的平台构建它们。
    【解决方案2】:

    对于 alpine,只需运行以下 Docker 命令:

    RUN apk add --no-cache \
    gcc \
    libc-dev \
    geos-dev \
    && pip install shapely
    

    这将安装 shapely 与 geo 的所有适当依赖项以及用于 alpine 的 shapely 相关的 C 依赖项

    【讨论】:

    • 这对我来说不适用于 python:3-alpine docker 图像。
    • 适用于 python:3.6-alpine。安装 geos-dev 解决了安装过程中缺少的依赖关系。这是正确的解决方案
    【解决方案3】:

    我的 python 应用程序遇到了同样的问题。对我有用的是:

    FROM python:3.8-slim-buster
    
    
    WORKDIR /app
    
    COPY requirements.txt requirements.txt
    
    RUN apt-get update && apt-get install -y \
        libgeos-dev
    
    RUN pip install -r requirements.txt
    
    COPY . /app/
    
    CMD ["python3", "app.py"]
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2020-05-06
    • 2022-10-07
    • 1970-01-01
    相关资源
    最近更新 更多