LoginSignup
1
0

More than 3 years have passed since last update.

pyproj を Jetson/RasPiにインストール

Last updated at Posted at 2020-10-07

Docker でpyprojの新しいの(ver2.1以上)を Jetson Nanoのdocker build でインストールするのにハマったのでメモします。
pyproj は測地系の変換をするのに使用できる、とても便利なツールです。
(cf.) 過去の自分の投稿
- 【python】WGS84から平面直角座標系への変換

背景

何に困ったか

今まで pip3 する requirementx.txt にpyproj==2.6.1.post1 を書いて使っていました。ノートPCのWSL1 (ubuntu18.04)や Google Cloud Platform のCI/CDのDocker image (ubuntu18.04 base)で動いていました。同じことを Jetson Nano (Jetpak4.4? ubuntu18.04)や raspberry pi4 の docker で行おうとしましたが、CPUがARMv8と異なるせいか、このrequirements.txt では動きませんでした。

PROJ のversion

pyproj の安定板は、現在(2020/10/07)では 2.6.1 のようです。
http://pyproj4.github.io/pyproj/stable/

image.png

ここにあるように、PROJは6.2.0以上のものをインストールしておく必要があります。問題は、pyproj が使用するPROJ というライブラリの新しいものをインストールできていないことありました。
(cf.) PROJ (https://proj.org/)
image.png

PROJとlibproj.a だけをインストールするだけなら、以下で入ります。
実際に、本家のインストールの説明に書かれています。

$ sudo apt install proj-bin
$ sudo apt install libproj-dev

しかし、これを実行しても古いものしか入らないのが問題。

$ proj
Rel. 4.9.3, 15 August 2016
usage: proj [ -bCeEfiIlormsStTvVwW [args] ] [ +opts[=arg] ] [ files ]

$  ldd `which proj` | grep libproj
        libproj.so.12 => /usr/lib/x86_64-linux-gnu/libproj.so.12 (0x00007f2adad70000)

この状態でも pyproj == 1.9.6 とpyprojも古いものにすれば、pip3 install できました。しかし、自分の書いたコードは pyproj >= 2.1 のAPIを利用していました。コードを書き換えたくないので、頑張ってpyproj をインストールすることにしました。

インストール方法

結局、PROJ の最新版をソースからbuild して install して、そのあとにpip3 すれば pyproj==2.6.1.post1 が入りました。この PROJ のインストールですが、割とはまりました。

PROJのインストール

ポイントは、
- PROJに必要なライブラリをビルド前にインストールする
- libproj.a は /usr/local/lib にinstall されるので、ここをLD_LIBRARY_PATH に含めておくこと。自分の環境では、この変数は空だった。

$ apt install -y \
  zlib1g-dev libsqlite3-dev pkg-config sqlite3 libcurl4-gnutls-dev libtiff5-dev 
$ wget https://download.osgeo.org/proj/proj-7.1.1.tar.gz
$ tar zxvf proj-7.1.1.tar.gz
# cd proj-7.1.1 && ./configure && make && make install
$ export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH

無事に新しいのが入ったぞ。

$ proj
Rel. 7.0.1, May 1st, 2020
usage: proj [-bdeEfiIlmorsStTvVwW [args]] [+opt[=arg] ...] [file ...]
$ ldd `which proj` | grep libproj
        libproj.so.19 => /usr/local/lib/libproj.so.19 (0x0000007fad95b000)

pyproj のインストール

pip3を実行すると分かりますが、PROJ_DIR という環境変数の設定が必要です。私は以下でOKでした。$PROJ_DIR/lib/libproj.a$PROJ_DIR/bin/proj を参照しているようでした。

$ export PROJ_DIR=/usr/local/
$ pip3 install pyproj==2.6.1.post1

この内容をDockerfile に書き、無事にdocker build できました。docker build には時間がかかりました。ソースからbuild は大変だ。

後で気が付いたきっと楽かもしれない方法

PROJ のビルドや pyprojのインストールには依存関係にいろいろはまりましたが、pyprojのソースにある Dockerfile を参考にすればよかったかも。じつはdocker で配布するのが今どきなのか?

https://github.com/OSGeo/PROJ/blob/master/Dockerfile には以下のようにあります。
image.png

pyproj もgithubからcloneして直接にビルドしてみる?(https://github.com/pyproj4/pyproj)

おわり

というわけで、無事に目的(ARMv8 での docker build/runで pyproj を利用)はできました。特にTODOはないですが、きっと将来 apt や pip で簡単に入るようになる幸せな世の中になっているに違いない、、、、と思います。他力本願ですみませんが、とりあえず今日はここまでです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0