※この記事は問題解決ができたわけではありません。対処がわかったらその段階で追記してゆきたと思います。
追記しました。根本的な問題は解決できていないですが、別の環境をあきらめて作り、geopandasをインストールしました。
Geopandasを使いたい
GISデータで扱われる主要なファイル形式としてシェープファイル(.shp)がありますが、
各々のフィーチャにくっついている膨大な量の表データもPandasのように扱うことができれば、その表の値に応じたデータ処理ができればということで調べていた時にGeopandasでそのようなことができると知りました。
早速今の環境にも導入したい!arcpyとの併用もできるだろうか、と早速インストールをしてみたのですが、ここで早速発生してしまったエラーの対処ができず参りました。
インストールで行った手順
普通にconda install geopandasを実行
(arcgispro-py3) C:\Users\hoge\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\arcgispro-py3>conda install geopandas
Fetching package metadata .............
Solving package specifications: .
Package plan for installation in environment C:\Users\hoge\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\arcgispro-py3:
The following NEW packages will be INSTALLED:
fiona: 1.8.13.post1-py36hd760492_0
geopandas: 0.8.1-py_0
libspatialindex: 1.9.3-h33f27b4_0
pyproj: 2.6.1.post1-py36hcfa1391_1
rtree: 0.9.4-py36h21ff451_1
Proceed ([y]/n)? y
geopandas-0.8. 100% |###############################| Time: 0:00:00 2.01 MB/s
geopandasと関連するパッケージがインストールされたみたいです。
conda listでパッケージを確認するとgeopandasと上記の一緒にインストールされたパッケージが加わっていました。
使ってみるとImportError発生
試しにjupyter notebookを起動して使ってみます。
パッケージがちゃんとインストールされていて使えるかどうかの確認のためjupyter notebookでimportだけ行いました。arcpyは比較用です。
import arcpy
import geopandas
結果、エラーが返ってきます。
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-1-be0c2fb87ace> in <module>
1 import arcpy
----> 2 import geopandas
~\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\geopandas\__init__.py in <module>
5 from geopandas.array import points_from_xy # noqa
6
----> 7 from geopandas.io.file import _read_file as read_file # noqa
8 from geopandas.io.arrow import _read_parquet as read_parquet # noqa
9 from geopandas.io.arrow import _read_feather as read_feather # noqa
~\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\geopandas\io\file.py in <module>
5 import pandas as pd
6
----> 7 import fiona
8 import pyproj
9 from shapely.geometry import mapping
~\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\fiona\__init__.py in <module>
82 os.environ["PATH"] = os.environ["PATH"] + ";" + libdir
83
---> 84 from fiona.collection import BytesCollection, Collection
85 from fiona.drvsupport import supported_drivers
86 from fiona.env import ensure_env_with_credentials, Env
~\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\fiona\collection.py in <module>
7
8 from fiona import compat, vfs
----> 9 from fiona.ogrext import Iterator, ItemsIterator, KeysIterator
10 from fiona.ogrext import Session, WritingSession
11 from fiona.ogrext import buffer_to_virtual_file, remove_virtual_file, GEOMETRY_TYPES
ImportError: DLL load failed: 指定されたプロシージャが見つかりません。
エラーメッセージの確認
arcpyは普通にインポートできているようですが、geopandasのインポートが失敗しています。エラーが発生した行を確認すると、geopandasがというよりも、これと一緒にインストール対象になっていたパッケージのfionaに何か問題があるようです。確かにディレクトリは存在するのに、正しくインストールできていないようです。
問題の原因と思われるfionaのインポートを試す
import fiona
この場合でも、同じようなエラーが発生しました。
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-2-4c762272c079> in <module>
----> 1 import fiona
~\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\fiona\__init__.py in <module>
82 os.environ["PATH"] = os.environ["PATH"] + ";" + libdir
83
---> 84 from fiona.collection import BytesCollection, Collection
85 from fiona.drvsupport import supported_drivers
86 from fiona.env import ensure_env_with_credentials, Env
~\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\fiona\collection.py in <module>
7
8 from fiona import compat, vfs
----> 9 from fiona.ogrext import Iterator, ItemsIterator, KeysIterator
10 from fiona.ogrext import Session, WritingSession
11 from fiona.ogrext import buffer_to_virtual_file, remove_virtual_file, GEOMETRY_TYPES
ImportError: DLL load failed: 指定されたプロシージャが見つかりません。
fionaがインストールできないという問題に対処しないとgeopandasは使えないみたいです。
引き続き対策方法を探します。
追記
ひとまずはarcpyと併用でなくてもいいので、geopandasをインストールして動かすことがまずはできればと思い、別の環境をgeoという名前で作成して新しく構築してみることにしました。
(arcgispro-py3) C:\Users\hoge\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\arcgispro-py3>conda create -n geo python=3.7
arcGISに付属していたpythonはバージョンが古かったため、こちらではpythonのバージョンをより新しい3.7に指定してインストールしました。何もバージョンを指定せずpythonとだけ記述した場合、既存のものと同じ3.6をインストールしようとするメッセージが表示されました。
空っぽの新しい環境にgeopandasをインストールしました。
(geo) C:\Users\hoge\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\geo>conda install geopandas
新しい環境でもjupyter notebookを使いたいので、Jupyterで複数カーネルを簡単に選択するための設定を参考にjupyter notebook上でkernelを切り替えて違う環境を使用できるようにしました。
現在のkernelを確認すると今は古いほうの環境だけになっているので、
(geo) C:\Users\hoge\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\geo>jupyter kernelspec list
Available kernels:
python3 C:\Users\hoge\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\geo\share\jupyter\kernels\python3
新しい環境をここに追加しました。
確認すると無事追加されたようです。
(geo) C:\Users\hoge\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\geo>ipython kernel install --user --name=geo --display-name=geo
Installed kernelspec geo in C:\Users\hoge\AppData\Roaming\jupyter\kernels\geo
(geo) C:\Users\hoge\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\geo>jupyter kernelspec list
Available kernels:
geo C:\Users\hoge\AppData\Roaming\jupyter\kernels\geo
python3 C:\Users\hoge\AppData\Local\Programs\ArcGIS\Pro\bin\Python\envs\geo\share\jupyter\kernels\python3
これでjupyter notebookでkernel → change kernel →geoを選択したうえで
import geopandas
を行うと、エラーが発生せず新環境のほうに正しくインストールされたことが確認できました。
こちらにはarcpyが入っていないのでいちいち切り替えをしなくては両者が使えないですが、入手すること自体はできました。
なぜ古いほうの環境にgeopandasそしてfionaをインストールできないのかは、新しい環境にインストールされたパッケージと見比べて確認してみたいと思います。