无法为cartopy linux安装Proj 8.0.0

问题描述 投票:0回答:4

我正在尝试在 Ubuntu 上安装 Cartopy,并且需要为 Cartopy 安装

proj v8.0.0
二进制文件。然而,当我尝试
apt-get install proj-bin
时,我只能得到
proj v6.3.1
。如何安装最新(或至少
v8.0.0
)的 cartopy 项目?

python linux ubuntu cartopy proj
4个回答
7
投票

我在这里回答我自己的问题,部分是为了帮助其他人解决这个问题,部分是为了自己存档,这样我知道如果再次遇到这个问题如何解决这个问题。我花了很长时间试图弄清楚,并写了详细的说明,所以请看下面:

安装 cartopy 是一个巨大的痛苦,而且我发现使用 conda 是一个非常糟糕的主意(它已经让我自己和 python 一起变砖了很多次)

此安装适用于 LINUX。

第 0 步。更新 apt:

apt update

步骤1.安装GEOS:

运行以下命令安装 GEOS:

apt-get install libgeos-dev

如果不起作用,请使用以下命令安装所有文件:

apt-get install libgeos-dev libgeos++-dev libgeos-3.8.0 libgeos-c1v5 libgeos-doc

第2步.安装项目依赖项:

  • 安装cmake:
apt install cmake
  • 安装sqlite3:
apt install sqlite3
  • 安装curl开发包:
apt install curl && apt-get install libcurl4-openssl-dev

第3步.安装Proj

尝试
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-9.0.0(或带有
    proj-x.x.x.tar.gz
    的任何版本):
wget https://download.osgeo.org/proj/proj-9.0.0.tar.gz 
  • 解压 tar.gz 文件:
tar -xf proj-9.0.0.tar.gz
  • cd 进入文件夹:
cd proj-9.0.0
  • 创建一个 build 文件夹并 cd 进入其中:
mkdir build && cd build
  • 运行(这可能需要一段时间):
cmake ..
cmake --build .
cmake --build . --target install
  • 运行以确保一切安装正确:
ctest

测试命令在我的一项测试中失败了(

19 - nkg
),但其他方面都很好。

您应该在

./bin
目录中找到所需的文件

最后:

  • 将二进制文件移动到 /bin 目录:
cp ./bin/* /bin
  • 根据 Justino,您可能还需要移动库:
cp ./lib/* /lib

现在,完成这一切之后,你终于可以用 pip 安装 cartopy 了:

pip install cartopy

完成此操作后,我的cartopy仍然无法工作。我下周回家处理这个问题,回来后突然就开始工作了,所以也许可以尝试重新启动


0
投票

应手动复制库 sudo cp ./lib/* /lib 这对我有用


0
投票

下面是我整理的用于处理大气数据和机器学习的

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" ]

0
投票

对于任何使用 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 效果很好。 希望对某人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.