non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

cartopyがライブラリエラーで動かず、更新したらgeosがセグフォして苦労した件

背景

先日、伊豆にサイクリングに行って来たので、サイコンデータから動画を作る自作のPythonスクリプトを動かしたら、エラーで動かない!

abrakatabura.hatenablog.com

python ../cycmap.py 
Traceback (most recent call last):
  File "../cycmap.py", line 4, in <module>
    import cartopy.crs as ccrs
  File "/Users/junichi/.pyenv/versions/3.7.7/lib/python3.7/site-packages/cartopy/__init__.py", line 96, in <module>
    import cartopy.crs
  File "/Users/junichi/.pyenv/versions/3.7.7/lib/python3.7/site-packages/cartopy/crs.py", line 36, in <module>
    from cartopy._crs import (CRS, Geodetic, Globe, PROJ4_VERSION,
ImportError: dlopen(/Users/junichi/.pyenv/versions/3.7.7/lib/python3.7/site-packages/cartopy/_crs.cpython-37m-darwin.so, 0x0002): Library not loaded: '/usr/local/opt/proj/lib/libproj.19.dylib'
  Referenced from: '/Users/junichi/.pyenv/versions/3.7.7/lib/python3.7/site-packages/cartopy/_crs.cpython-37m-darwin.so'
  Reason: tried: '/usr/local/opt/proj/lib/libproj.19.dylib' (no such file), '/usr/local/lib/libproj.19.dylib' (no such file), '/usr/lib/libproj.19.dylib' (no such file), '/usr/local/Cellar/proj/9.0.1/lib/libproj.19.dylib' (no such file), '/usr/local/lib/libproj.19.dylib' (no such file), '/usr/lib/libproj.19.dylib' (no such file)

projとgeosをHomebrewで最新化したら、セグフォ!

otoolで無理やり、.dylibファイルの参照を変更する方法を真っ先に思いつくも、otoolコマンドも久しく使ってないからオプションや指定方法を調べるのも面倒くさそう。

ひとまず、caropyが依存しているライブラリをhomebrewで最新化して試したが、libgeosでセグフォ

原因

pyenv環境なので、HOME配下に複数のlibgeosが入った状態になっており、これが原因。

解決方法

Homebrewで入れたgeosを参照するように、cartopyが内部的に使用しているshapelyを再インストールして、以下のようにソースからビルドするオプションをpipで指定する。

pip uninstall shapely
pip install --no-binary shapely shapely

関連記事

10年前の記事