我正在尝试在 Ubuntu 上安装 Cartopy,并且需要为 Cartopy 安装
proj v8.0.0
二进制文件。然而,当我尝试apt-get install proj-bin
时,我只能得到proj v6.3.1
。如何安装最新(或至少v8.0.0
)的 cartopy 项目?
我在这里回答我自己的问题,部分是为了帮助其他人解决这个问题,部分是为了自己存档,这样我知道如果再次遇到这个问题如何解决这个问题。我花了很长时间试图弄清楚,并写了详细的说明,所以请看下面:
apt update
运行以下命令安装 GEOS:
apt-get install libgeos-dev
如果不起作用,请使用以下命令安装所有文件:
apt-get install libgeos-dev libgeos++-dev libgeos-3.8.0 libgeos-c1v5 libgeos-doc
apt install cmake
apt install sqlite3
apt install curl && apt-get install libcurl4-openssl-dev
apt-get
以防万一它有效:不幸的是,cartopy 至少需要 proj v8.0.0,但是如果使用 apt 安装 proj,则只能安装 proj v6.3.1
仅供参考,以防万一发生任何变化,这是从 apt 安装 proj 的命令:
apt-get install proj-bin
我相当确定这就是您所需要的,但如果不是,此命令将安装其余的项目文件:
apt-get install proj-bin libproj-dev proj-data
要删除上述安装,请运行:
apt-get remove proj-bin
或:
apt-get remove proj-bin libproj-dev proj-data
因此,如果上述命令不起作用(截至 2022/4/8 不起作用),请按照以下说明从 source 安装 proj:
proj-x.x.x.tar.gz
的任何版本):wget https://download.osgeo.org/proj/proj-9.0.0.tar.gz
tar -xf proj-9.0.0.tar.gz
cd proj-9.0.0
mkdir build && cd build
cmake ..
cmake --build .
cmake --build . --target install
ctest
测试命令在我的一项测试中失败了(
19 - nkg
),但其他方面都很好。
您应该在
./bin
目录中找到所需的文件
最后:
cp ./bin/* /bin
cp ./lib/* /lib
现在,完成这一切之后,你终于可以用 pip 安装 cartopy 了:
pip install cartopy
完成此操作后,我的cartopy仍然无法工作。我下周回家处理这个问题,回来后突然就开始工作了,所以也许可以尝试重新启动
应手动复制库 sudo cp ./lib/* /lib 这对我有用
下面是我整理的用于处理大气数据和机器学习的
Multistage
Dockerfile
。
# syntax=docker/dockerfile:1
# Description:
# Multistage Dockerfile for working with the SEVIR dataset and other atmospheric
# data formats for analysis, processing, and Machine Learning.
# Example:
# - docker build -t $USER/sevir .
# - docker run -it -p 8888:8888 --gpus all --volume $PATH_TO_SEVIR:/home/vscode $USER/sevir
# TODD:
# install ffmpeg for video processing needed for matplotlib animations
# sudo apt install ffmpeg
FROM nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04 AS base
USER root
WORKDIR /
SHELL ["/bin/bash","-c"]
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y && apt-get install -y --no-install-recommends \
python3.10 \
python3.10-venv \
libgeos3.10.2 \
libgdal30 \
&& rm -rf /var/lib/apt/lists/* \
&& python3.10 -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
USER 1001
# =====================================================================================================================
# Compiler Stage; this will be omitted from the final image
# =====================================================================================================================
FROM base AS compiler
USER root
WORKDIR /
SHELL ["/bin/bash","-c"]
ENV DEBIAN_FRONTEND=noninteractive
# hadolint ignore=DL3008
RUN apt-get update -y \
&& apt-get install -y --no-install-recommends \
wget \
gcc \
g++ \
cmake \
gfortran \
python3.10-dev \
build-essential \
# see: https://github.com/OSGeo/PROJ/blob/master/Dockerfile
zlib1g-dev libsqlite3-dev sqlite3 libcurl4-gnutls-dev libtiff5-dev libsqlite3-0 libtiff5 \
libgdal-dev libatlas-base-dev libhdf5-serial-dev \
&& rm -rf /var/lib/apt/lists/*
USER 1001
# =====================================================================================================================
# EcCodes is a library for decoding and encoding grib files.
# =====================================================================================================================
FROM compiler AS eccodes
USER root
ARG ECCODES="eccodes-2.24.2-Source"
ARG ECCODES_DIR="/usr/include/eccodes"
WORKDIR /tmp
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN wget -c --progress=dot:giga \
https://confluence.ecmwf.int/download/attachments/45757960/${ECCODES}.tar.gz -O - | tar -xz -C . --strip-component=1
WORKDIR /tmp/build
SHELL ["/bin/bash","-c"]
RUN cmake -DCMAKE_INSTALL_PREFIX="${ECCODES_DIR}" -DENABLE_PNG=ON .. \
&& make -j"$(nproc)" \
&& make install
USER 1001
# =====================================================================================================================
# PROJ is a library for coordinate transformations, and is a requirement for cartopy.
# =====================================================================================================================
FROM compiler AS proj
USER root
WORKDIR /proj
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN wget -c --progress=dot:giga \
https://github.com/OSGeo/PROJ/archive/refs/tags/9.0.1.tar.gz -O - | tar -xz -C . --strip-component=1
WORKDIR /proj/build
SHELL ["/bin/bash","-c"]
RUN cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF \
&& make -j"$(nproc)" \
&& make install
USER 1001
# =====================================================================================================================
# Cartopy is a python library for plotting data on maps.
# =====================================================================================================================
FROM proj AS cartopy
USER root
SHELL ["/bin/bash","-c"]
ENV DEBIAN_FRONTEND=noninteractive
# hadolint ignore=DL3008
RUN apt-get update -y \
&& apt-get install -y --no-install-recommends \
python3.10-dev \
&& rm -rf /var/lib/apt/lists/*
# hadolint ignore=DL3013
RUN python3.10 -m pip install --upgrade pip --no-cache-dir && python3.10 -m pip install --no-cache-dir \
Cartopy==0.21.1 \
matplotlib==3.7.2
USER 1001
# =====================================================================================================================
# Final Image
# =====================================================================================================================
FROM base AS lunch-box
USER root
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID
WORKDIR /tmp/sevir
SHELL ["/bin/bash","-c"]
# hadolint ignore=DL3008
RUN groupadd --gid $USER_GID $USERNAME \
&& useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
&& chown -R $USER_UID:$USER_GID /opt/venv
ENV ECCODES_DIR=/usr/include/eccodes
COPY --from=eccodes --chown=$USER_UID:$USER_GID $ECCODES_DIR $ECCODES_DIR
COPY --from=cartopy --chown=$USER_UID:$USER_GID /opt/venv /opt/venv
# - install requirements that arn't in the requirements.txt and torch for caching
RUN python3.10 -m pip install --no-cache-dir \
torch==2.0.1 \
cfgrib==0.9.10.4 \
notebook==6.5.4 \
eccodes==1.6.0
# - install the package and dependencies
COPY src/ src/
COPY setup.py setup.py
COPY pyproject.toml pyproject.toml
RUN python3.10 -m pip install . --no-cache-dir && rm -rf /tmp/*
USER $USERNAME
ARG HOME=/home/$USERNAME
WORKDIR $HOME
COPY --chown=$USER_UID:$USER_GID notebooks/ examples/
VOLUME $HOME/sevir-volume
ENV PATH_TO_SEVIR=$HOME/sevir-volume/sevir
CMD [ "jupyter", "notebook", "--ip=0.0.0.0", "--NotebookApp.token=''", "--NotebookApp.password=''", "--no-browser" ]
对于任何使用 Red Hat Enterprise Linux 8 的人,我都是这样做的:
安装依赖项:
sudo dnf install geos-devel sqlite sqlite-devel cmake libcurl-devel libtiff-devel
然后下载源码:
mkdir Downloads/Proj
cd Downlods/Proj
wget https://download.osgeo.org/proj/proj-8.2.1.tar.gz
tar -xf proj-8.2.1.tar.gz
cd proj-8.2.1/
然后配置并构建:
./configure
make
make check
sudo make install
然后在 Python 虚拟环境中安装 Cartopy 效果很好。 希望对某人有帮助。