Tex, python, illusrator, VPSの学生ノート

latotex-blog

Python

geopandasインストールでGDAL_DRIVER_PATHなどのエラーが出る原因

投稿日:2020年12月2日 更新日:







講義でgeopandasを使う機会があったのですが、
インストールで手こずったので、備忘録として残しておきます。
Anacondaを使ってgeopandasをインストールしています。

インストール手順は以下の通りです。
「geoenv」という仮想環境を新しくつくり、geopandasをインストールします。

$ conda create -n geoenv
$ activate geoenv
$ conda install -c conda-forge geopandas

ここからがエラー内容です。
インストールが成功した印である「done」の後に「指定されたパスが見つかりません。」というメッセージが表示され、

$ set "GDAL_DRIVER_PATH="
$ rem proj-data is installed because its license was copied over

というメッセージがプロンプト上に表示されました。
GDAL_DRIVER_PATHの設定やprojのアップデートをしてもこのエラーメッセージは直らず・・・・

スポンサーリンク

原因:anaconda自体のパスに半角スペースが含まれていたから!

結論からいうと、anacondaをインストールするユーザの名前に半角スペースを入れていたからでした。そういえばインストールするときに、以下のような警告があったことを思い出しました。

Warning:'Destination Folder' contains 1 space.
This can cause problems with several Conda packages.
Please consider removing the space.
(スペースを消さないとCondaのパッケージに支障がでるよ)

幸か不幸か、いままで何も問題なく使えていたので気にしませんでしたが・・・
スペースがないユーザー名を新しくつくり、再びインストールするとgeopandasが正常に動きました。
ユーザー名の変更はかなり手間がかかりそうなので、
よほどの事情がない以上は新しくユーザー名を作った方が手っ取り早いと思います。

蛇足:activateをしたときにエラーが表示される理由は?

エラー内容が表示されるタイミングを調べるとインストール直後以外にも

$ activate geoenv

を実行したときにも同じエラーメッセージが表示されます。

そこで「conda.bat」の中身をみてみると(conda activateでも環境を有効にできるので)

@IF [%1]==[activate]   "%~dp0_conda_activate" %*
@IF [%1]==[deactivate] "%~dp0_conda_activate" %*

どうやら、「_conda_activate.bat」に詳しいことが書かれていることが分かります

「_conda_activate.bat」をみると、(コードハイライトが上手く表示できていませんが、無視してください)

@FOR %%A in ("%TMP%") do @SET TMP=%%~sA
@SET _sysp=!_sysp:~0,-1!
@SET PATH=!_sysp!;!_sysp!\Library\mingw-w64\bin;!_sysp!\Library\usr\bin;!_sysp!\Library\bin;!_sysp!\Scripts;!_sysp!\bin;%PATH%
@REM It seems that it is not possible to have "CONDA_EXE=Something With Spaces"
@REM and %* to contain: activate "Something With Spaces does not exist".
@REM MSDOS associates the outer "'s and is unable to run very much at all.
@REM @SET CONDA_EXES="%CONDA_EXE%" %_CE_M% %_CE_CONDA%
@REM @FOR /F %%i IN ('%CONDA_EXES% shell.cmd.exe %*') DO @SET _TEMP_SCRIPT_PATH=%%i not return error
@REM This method will not work if %TMP% contains any spaces.

スペースがあると上手く動きませんとコメント(@REMの行)していることが分かります。
おそらく「指定されたパスが見つかりません。」というのがanaconda自体の問題で、
GDAL_DRIVER_PATHとproj-dataはCondaパッケージの問題だと思います。

試しにプロンプト上で

$ echo %TMP%
C:\Users\username~1\AppData\Local\Temp

とすると、「~」がついたパスが表示されていることが分かります。TMP(一時ファイル)のパスを変えるのは簡単なので、All userでanacondaをインストールした場合はTMPのパスの変更でgeopandasを入れられるかもしれません(憶測ですが・・・)

試しにgeopandasで作図してみる

アイキャッチにある図は、国土交通省の国土数値情報(埼玉県の行政区域データと都道府県地価調査データ)を使って作図したものです。

行政区域データ(N03-20_11_200101.geojson)は
https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-v2_4.html

都道府県地価調査データ(L02-20_11.geojson)は
https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-L02-v2_7.html
から入手しました。

作図に使ったPythonスクリプトを載せておきます。geopandasの動作テストとしてご利用ください。

#!/usr/bin/env python3

  #必要なものを宣言
  import matplotlib.pyplot as plt
  import geopandas as gpd

  #なくてもOK
  import warnings
  warnings.filterwarnings('ignore')


  def main(df_geo, df_shape):

      fig = plt.figure(figsize=(8,8), dpi = 200)

      ax = fig.add_subplot(111)

      #地形プロット
      df_geo.plot(ax= ax, color='white', edgecolor='black')
      #地価調査地点プロット
      df_shape.plot(ax=ax, marker='.', color='c', markersize=20)


  if __name__ == '__main__':

      #行政地区データ(https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-v2_4.html)
      df_geo = gpd.read_file(r'C:\Users\username\N03-20200101_11_GML\N03-20_11_200101.geojson')

      #地価調査データ(https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-L02-v2_7.html)
      df_shape = gpd.read_file(r'C:\Users\username\L02-20_11_GML\L02-20_11.geojson',encoding='SHIFT-JIS')

      main(df_geo, df_shape)

      fileo1 = r'C:\Users\username\test_geopandas.png'
      plt.savefig(fileo1, format='png')


-Python
-, , ,

Copyright© latotex-blog , 2021 All Rights Reserved Powered by STINGER.