尝试在 docker 容器内进行 pip 安装时出现 OSError
OSError when trying to pip install shapely inside docker container
无法找到库 geos_c 或加载其任何变体 ['libgeos_c.so.1'、'libgeos_c.so']
使用 python:3.5.1 图像我正在尝试 运行 一个容器,其中包括它安装在 requirements.txt 中的其他内容。当 docker 容器尝试正常安装时,出现上述错误。
运行 apt-get install libgeos-dev
是我在尝试搜索问题时看到的东西,但 returns 无法找到软件包 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}
Docker文件:
FROM python:3.5.1-onbuild
Requirements.txt:
shapely
(已简化以尝试隔离问题。)
我从以下位置找到了解决方案: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
并且安装成功。
偶尔会停止构建,但主要问题已解决。
对于 alpine,只需 运行 遵循 Docker 命令:
RUN apk add --no-cache \
gcc \
libc-dev \
geos-dev \
&& pip install shapely
这将安装 shapely,其中包含 geo 的所有正确依赖项和 alpine 的 shapely 的 C 相关依赖项
我的 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"]
无法找到库 geos_c 或加载其任何变体 ['libgeos_c.so.1'、'libgeos_c.so']
使用 python:3.5.1 图像我正在尝试 运行 一个容器,其中包括它安装在 requirements.txt 中的其他内容。当 docker 容器尝试正常安装时,出现上述错误。
运行 apt-get install libgeos-dev
是我在尝试搜索问题时看到的东西,但 returns 无法找到软件包 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}
Docker文件:
FROM python:3.5.1-onbuild
Requirements.txt:
shapely
(已简化以尝试隔离问题。)
我从以下位置找到了解决方案: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
并且安装成功。
偶尔会停止构建,但主要问题已解决。
对于 alpine,只需 运行 遵循 Docker 命令:
RUN apk add --no-cache \
gcc \
libc-dev \
geos-dev \
&& pip install shapely
这将安装 shapely,其中包含 geo 的所有正确依赖项和 alpine 的 shapely 的 C 相关依赖项
我的 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"]