どこにでもいる30代SEの学習ブログ

主にプログラミング関連の学習内容。読んだ本の感想や株式投資についても書いてます。

pygribのインストール方法:Amazon Linux2

f:id:predora005:20200921203743p:plain
<pygribのインストール方法:Amazon Linux2>*1

※ 2020/06/09にQrunchで書いた記事を移行しました。

Amazon Linux2で、pygribのインストールに、かなり手間取りました。 自分や他の方が、再び同じ所で躓かないように、備忘録として解決法をまとめました。

何が起きるのか

pygribをpipでインストールしようとするとエラーが表示されます。

sudo pip3 install numpy
sudo pip3 install pygrib
# ModuleNotFoundError: No module named 'pyproj'

pyprojをインストールしてリトライすると、こうなります。

sudo pip3 install pyproj
sudo pip3 install pygrib
# pygrib.c:614:10: 致命的エラー: grib_api.h: No such file or directory
#      #include "grib_api.h"
#               ^~~~~~~~~~~~

"grib_api.h"が無い問題が解決できませんでした。 試行錯誤して"grib_api.h"は入っても、結局pygribに失敗しました。 最終的には以下の手順で無事インストールできたわけですが、随分と時間を要してしまいました。

色々インストールすることになった

インストールしたかったのはpygribだけでした。しかし、最終的に以下のモノをインストールするに至りました。

  • pygrib
  • pyproj, numpy (pygribで使用しているため)
  • setuptools (アップグレード。pygribインストール時にエラーが出るため)
  • ecCodes (pygribで使用しているため)
  • gfortran (ecCodesインストールのため)
  • CMake (ecCodesインストールのため)
  • OpenSSL (CMakeで使用しているため)

そもそもは、気象データの読み込みがしたかったのです。 気象データがGRIB2というフォーマットであり、GRIB2ファイル読み込みのためにpygribを使おうとしました。

[1] CMake3のインストール方法

[1-1] OpenSSLをインストールする

CMakeの依存関係にOpenSSLが含まれているため、事前にインストールします。

sudo yum install openssl openssl-devel

ちなみに、OpenSSLをインストールせずCMakeをインストールしようとすると、以下のエラーが表示されます。

# Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY OPENSSL_INCLUDE_DIR) 

[1-2] CMakeをインストールする

公式の手順。 最新版はココにあります。wgetcurlコマンドでダウンロードします。 また、configure実行時にインストール先を指定できます。 指定する場合はprefixに指定します。

wget https://github.com/Kitware/CMake/releases/download/v3.17.3/cmake-3.17.3.tar.gz
tar xzf cmake-3.17.3.tar.gz
cd cmake-3.17.3/
./configure --prefix=/usr/local/cmake/3.17.3/
make
sudo make install

インストール完了後、CMakeが使えるようにパスを通しておきます。 export "PATH=$PATH:/usr/local/cmake/3.17.3/bin/"でも良かったのですが、/usr/local/bin/にシンボリックリンクを作成しました。

sudo ln -s /usr/local/cmake/3.17.3/bin/cmake /usr/local/bin/cmake
sudo ln -s /usr/local/cmake/3.17.3/bin/cpack /usr/local/bin/cpack 
sudo ln -s /usr/local/cmake/3.17.3/bin/ctest /usr/local/bin/ctest

[2] ecCodesのインストール方法

かつては、GRIB APIが使われていましたが、ecCodesに移行されています。 2018年12月現在、GRIB APIはメンテナンスされなくなったと公式にも書いてあります。

[2-1] gfortranのインストール

ecCodesインストール前にgfortranをインストールします。

sudo yum install gcc-gfortran  

インストールしないと、ecCodesをmakeする際に以下のエラーが発生します。 ecCodesインストール時にfortranを使用しない選択肢もありそうでしたが、面倒なのでインストールしました。

# CMake Error: your Fortran compiler: "CMAKE_Fortran_COMPILER-NOTFOUND" was not found.   Please set CMAKE_Fortran_COMPILER to a valid compiler path or name.  

[2-2] ecCodesのインストール

公式の手順。 最新版はココからダウンロードします。 -DCMAKE_INSTALL_PREFIXにインストール先を指定することが可能です。

wget https://confluence.ecmwf.int/download/attachments/45757960/eccodes-2.17.0-Source.tar.gz
tar xzf eccodes-2.17.0-Source.tar.gz
mkdir build ; cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/eccodes/2.17.0 ../eccodes-2.17.0-Source
make
ctest
sudo make install

インストール終了後に、python用のモジュールをインストールします。

sudo pip3 install eccodes-python

[3] pygribのインストール方法

[3-1] setuptoolsのアップグレード

sudo pip3 install --upgrade setuptools

[3-2] numpy, pyprojのインストール

sudo pip3 install numpy pyproj

[3-3] pygribのインストール

公式のソースと手順

pipでpygribをインストールすることも出来ます。 しかし、私の環境ではエラーとなり解決できませんでした。ネットで調べてみてもインストールできないケースは多いようです。 そのため、githubからソースをダウンロードしインストールしました。

git clone https://github.com/jswhit/pygrib
cd pygrib
cp -p setup.cfg.template setup.cfg

"setup.cfg"のgrib_api_dirを変更し、ecCodesのインストール先を指定します。 インストール先は環境によって異なります。私の環境では以下の通りです。

grib_api_dir = /usr/local/eccodes/2.17.0/

.gitディレクトリを削除したのち圧縮し、pipでインストールします。

sudo rm -rf .git
zip -r ../pygrib.zip *
cd ../
sudo pip3 install pygrib.zip

終わりに

最近はインストールも便利になって忘れていましたが、コマンド一つでインストールできることのありがたみを感じました。

参考文献

以下の記事を参考にさせていただきました。

*1:Clker-Free-Vector-ImagesによるPixabayからの画像