ecCodes学习笔记:使用conda在Windows中编译ecCodes

目录

2019年11月:新版本的eccodes已可以在Windows下解码JPEG压缩的GRIB2文件,所以请直接使用conda安装eccodes包。

ecmwf已与今年2月份官方提供windows环境下的ecCodes库,详情参见《ecCodes and Magics available under Windows》。但经过我的实际测试,截止到2019年5月,使用conda安装的ecCodes不支持JPEG压缩,无法读取GRIB2最常见的数据种类,即使用JPEG压缩的GRIB2文件。因此,还是需要从源码编译。

ecCodes已内置AppVeyor上的windows编译,参考.appveyor.yml文件,使用conda环境在Windows中编译ecCodes。

准备编译环境

准备Visual Studio编译环境,我使用Visual Studio 2019测试。

安装conda环境,例如安装Anaconda 3发行包。注:因为我不编译ecCodes的Python接口,所以可以使用python 3.x。

可以创建一个单独的env用来编译ecCodes,例如我创建nuwe_pyeeccodes环境,并通过Anaconda启动一个终端。

启动终端后还需要激活 Visual Studio 编译环境,例如激活Visual Studio 2019 x64编译器。

"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"

配置环境变量

需要的环境变量如下:

  • INSTALL_DIR:ecCodes安装的目标位置
  • ECCODES_SRC: ecCodes源码目录
  • ECBUILD_SRC: ecbuild源码目录

准备软件

下载eccodes源码,可以下载软件包解压到目标路径

git clone --depth 1 https://github.com/ecmwf/eccodes.git %ECCODES_SRC%

下载ecbuild源码

git clone --depth 1 https://github.com/ecmwf/ecbuild.git %ECBUILD_SRC%

安装依赖库

安装linux工具

conda install -c msys2 m2-bash ^
                       m2-findutils ^
                       m2-coreutils ^
                       m2-grep ^
                       m2-sed ^
                       m2-gawk ^
                       m2-diffutils ^
                       m2-perl

安装最新版的cmake

conda install -c conda-forge cmake

安装JPEG解码库OpenJPEG

conda install openjpeg

编译

cmake自动查找OPENJPEG有问题,需要手动指定OPENJPEG_INCLUDE_DIR变量。

cd %ECCODES_SRC%
mkdir build && cd build
cmake -G "NMake Makefiles" ^
      -D CMAKE_INSTALL_PREFIX=%INSTALL_DIR% ^
      -D CMAKE_BUILD_TYPE=Release ^
      -D ENABLE_FORTRAN=0 ^
      -D ENABLE_PYTHON=0 ^
      -D ENABLE_NETCDF=0 ^
      -D ENABLE_JPG=1 ^
      -D IEEE_LE=1 ^
      -D ENABLE_MEMFS=0 ^
      -D ENABLE_TESTS=0 ^
      -D ENABLE_EXTRA_TESTS=OFF ^
      -D OPENJPEG_INCLUDE_DIR="C:/Users/windroc/Anaconda3/envs/nuwe_pyeccodes/Library/include/openjpeg-2.3" ^
      ..
nmake
nmake install

将install目录下的内容拷贝到conda环境的Library目录下,完成ecCodes的安装。

使用

需要设置环境变量ECCODES_DEFINITION_PATHECCODES_SAMPLES_PATH