文書の過去の版を表示しています。


pyprojのdatadir

2018/08頃、Anacondaで何の気なしにpyprojをアップデートしたところ、突然エラーを出すようになった件をきっかけに、調べたことをメモ。

発生した現象

EPSGコードを使ってProjオブジェクトを生成しようとすると、エラーになった。

import pyproj
prj_jgd2000 = pyproj.Proj('+init=epsg:4612')
RuntimeError: b'no arguments in initialization list'
  • Windows
  • Anaconda経由
  • Python 3.5
  • pyproj 1.5.9.1

原因

EPSGコードはコードなのでそれ自体に情報は無く、実際にPROJ.4用に渡すパラメータがコード毎に決められている。個別のEPSGコードはEPSG.ioなどで調べられる。

  • EPSG:4612
  • PROJ.4用パラメータ

pyprojでEPSGコードからインスタンス生成しようとしたとき、裏では、このパラメータを引くための辞書のようなファイルを読んでいる。

そのパスを記録しているのが、datadir.pyのようだ。

  • Base環境
    • Anaconda3/Lib/site-packages/pyproj/datadir.py
  • 任意環境
    • Anaconda3/envs/(envname)/Lib/site-packages/pyproj/datadir.py

このdatadir.pyの記述の場所に、辞書用データが存在していないことが原因だった。

なお、全てのpyprojがダメということではなく、特定のビルド(1.9.5.1-py35hb98d9bb_1)のみでパスが上手く張られていなかったので、ちょっとしたミスかも知れない。

別のビルド(1.9.5.1-py35_0)を明示的に指定してインストールし直すと、解消した。

まぁ、さっさとpython3.6以上に上げればいいんだけどね。他のモジュールの提供状況との兼ね合いでね。

その他

なお、pyprojは本家から提供されているのはソースで、Anacondaなど他人がビルドしてくれたものを用いない場合は自力でビルドするタイプのモジュールであり、ビルド時の設定でEPSGコード辞書の場所を指定できるようだ。環境変数の'PROJ_DIR'に、OSGeo4Wなどで提供されているデータファイルのパスを指定しておくとよいらしい。(といいつつ、OSGeo4Wのどのファイルのあるパスを指定すればいいのか、イマイチわかっていない)

参考

programming/python/packages/pyproj/datadir.1533792137.txt.gz · 最終更新: 2018/08/09 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0