Debian (Raspbian) Baster で proj をビルドする方法

Linux,お役立ち情報,プログラムPython,Raspberry Pi,reTerminal,シェルスクリプト

訳あって reTerminal という製品で色々開発する必要にせまられています。その中で Python地図の座標変換をするライブラリ Pyproj を入れようと思ったけどダメで、そのために Proj ライブラリをソースからビルドした話をまとめます。

reTerminal に関する画面設定の記事は「ラズパイ(reTerminal)の画面ドライバを入れ直し、回転したタッチパネル判定を直す方法」をご覧ください。

環境設定

実行した Raspberry Pi の OS バージョンは次の通り。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

Python のバージョンは 3.7.3, pip のバージョンは 22.3.1 でした。普通に pip を使って pyproj のインストールを試みると

$ pip install pyproj
Defaulting to user installation because normal site-packages is not writeable
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting pyproj
  Using cached pyproj-3.2.1.tar.gz (213 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  error: subprocess-exited-with-error

  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [1 lines of output]
      ERROR: Minimum supported PROJ version is 7.2.0, installed version is 5.2.0. For more information see: https://pyproj4.github.io/pyproj/stable/installation.html
      [end of output]
...

と、PROJ のバージョンが低いと怒られます。実際、apt install proj-bin を試しても最新バージョンがこれだったので、 PROJ をソースビルドする必要があると判断しました。

結論

結果としてこのようにオプションをつけて PROJ を make できました。

mkdir build
cd build
cmake \
-DSQLITE3_INCLUDE_DIR=/usr/include \ 
-DSQLITE3_LIBRARY=/usr/lib/arm-linux-gnueabihf/libsqlite3.so \
-DCURL_INCLUDE_DIR=/usr/include/arm-linux-gnueabihf \
-DCURL_LIBRARY=/usr/lib/arm-linux-gnueabihf/libcurl.so.4 \
..
cmake --build .
sudo cmake --build . --target install

sqlite や curl のライブラリパスがうまく通ってませんでした。

試したこと

まずは PROJ の公式ページからソースビルドのページに従ってビルドを試みました。最新版ソースコードのダウンロードページはここです。

マニュアルにしたがってビルドを試みます。

wget https://download.osgeo.org/proj/proj-9.1.0.tar.gz
tar zxvf proj-9.1.0.tar.gz
cd proj-9.1.0
mkdir build
cd build
cmake ..

ここで sqlite だとか curl がないと怒られました。そのため apt からインストールします。

sudo apt install sqlite3 libcurl4-openssl-dev

その後、ライブラリファイルなどの場所を探します。find コマンドで検索しました。

$ sudo find / -name "*sqlite*.h*"
/usr/include/sqlite3.h
$ sudo find / -name "*sqlite*.so*"
/usr/lib/arm-linux-gnueabihf/libsqlite3.so
$ sudo find / -name "*curl*"
/usr/include/arm-linux-gnueabihf/curl
$ sudo find / -name "*libcurl*.so*"
/usr/lib/arm-linux-gnueabihf/libcurl.so.4

これらの結果を cmake するときのオプションとして指定します。その結果ビルドするとうまくいきました。

cmake \
-DSQLITE3_INCLUDE_DIR=/usr/include \ 
-DSQLITE3_LIBRARY=/usr/lib/arm-linux-gnueabihf/libsqlite3.so \
-DCURL_INCLUDE_DIR=/usr/include/arm-linux-gnueabihf \
-DCURL_LIBRARY=/usr/lib/arm-linux-gnueabihf/libcurl.so.4 \
..
cmake --build .
sudo cmake --build . --target install

これで PROJ ライブラリのインストールに成功したので、pip install を試みます。

pip install pyproj

これで問題なくインストールできました。

参考資料