【问题标题】:How do I install Cython, cartopy and shapely in a python docker container?如何在 python docker 容器中安装 Cython、cartopy 和 shapely?
【发布时间】:2020-03-30 17:01:15
【问题描述】:

我试图让 Cythoncartopyshapely 在 docker 容器中运行,这样我就可以利用 python 库 traffic。我目前遇到 Cython 错误:

Collecting Cython==0.26 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/87/6c/53a9e636c9dbe7acd5c002422c1a7a48a367f3b4c0cf6490908f43398ca6/Cython-0.26-cp27-cp27mu-manylinux1_x86_64.whl (7.0MB)
Collecting geos (from -r requirements.txt (line 2))
  Downloading https://files.pythonhosted.org/packages/11/9b/a190f02fb92f465a7640b9ee7da732d91610415a1102f6e9bb08125a3fef/geos-0.2.2.tar.gz (365kB)
Collecting cartopy (from -r requirements.txt (line 3))
  Downloading https://files.pythonhosted.org/packages/e5/92/fe8838fa8158931906dfc4f16c5c1436b3dd2daf83592645b179581403ad/Cartopy-0.17.0.tar.gz (8.9MB)
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-Se89QB/cartopy/setup.py", line 42, in <module>
        raise ImportError('Cython 0.15.1+ is required to install cartopy.')
    ImportError: Cython 0.15.1+ is required to install cartopy.

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-Se89QB/cartopy/
The command '/bin/sh -c pip install --no-cache-dir -r requirements.txt' returned a non-zero code: 1

以下是我的设置:

Dockerfile:

FROM ubuntu:latest
WORKDIR /usr/src/app
#apt-get install -y build-essential -y  python python-dev python-pip python-virtualenv libmysqlclient-dev curl&& \
RUN \
  apt-get update && \
  apt-get install -y build-essential -y  python python-dev python-pip python-virtualenv libmysqlclient-dev curl&& \
  rm -rf /var/lib/apt/lists/*
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
# Install cron
RUN apt-get update
RUN apt-get install cron
# Add crontab file in the cron directory
ADD crontab /etc/cron.d/simple-cron
# Add shell script and grant execution rights
ADD script.sh /script.sh
RUN chmod +x /script.sh
# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/simple-cron
# Create the log file to be able to run tail
RUN touch /var/log/cron.log
# Run the command on container startup
CMD cron && tail -f /var/log/cron.log

requirements.txt

Cython==0.26
geos
cartopy
shapely
traffic

【问题讨论】:

    标签: python docker cython cartopy


    【解决方案1】:

    尝试先使用pip 安装 Cython,然后再使用 requirements.txt

    【讨论】:

      【解决方案2】:

      cartopy 有很多依赖项,其中一些——尤其是 Proj——可能无法使用 PIP 或 apt-get 解决。 numpy 和 cython 可以通过在安装 cartopy 之前单独安装它们来解决(就像 u/dopplershift 建议的那样)——但 Proj 永远不会解决,grr。

      我的解决方案是使用 conda install,它可以为您解决依赖关系。不幸的是,Docker 和 Conda 不能很好地协同工作,但你可以使用 miniconda 来解决它。试试这个:

      FROM ubuntu:latest
      FROM python:3.8.5
      
      RUN mkdir /app
      ADD . /app
      WORKDIR /app
      
      # cartopy cannot be installed using PIP because the proj never gets resolved.
      # The proj dependency never gets resolved because there are two Python packages
      # called proj, and PIP always loads the wrong one. The conda install command,
      # however, using the conda-forge channel, does know how to resolve the dependency
      # issues, including packages like numpy.
      #
      # Here we install miniconda, just so we can use the conda install command
      # for cartopy.
      
      FROM continuumio/miniconda3
      RUN conda install -c conda-forge cartopy
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-21
        • 1970-01-01
        • 2017-11-11
        • 2020-01-12
        • 1970-01-01
        • 2021-09-08
        • 1970-01-01
        相关资源
        最近更新 更多