Kanahiro / GSI-VTDownloader

地理院ベクトルタイルをレイヤーとして追加するQGISプラグイン
https://plugins.qgis.org/plugins/GSI-VTDownloader-master/
GNU General Public License v2.0
4 stars 3 forks source link

QGIS 3.28、3.30でメソッド呼び出し時のエラーが発生します #9

Open koukita opened 1 year ago

koukita commented 1 year ago

プラグインを有効にすると、次のエラーが出ます。 プラグインのバージョンは0.2.2

===================== classFactory()メソッドの呼び出し時にエラーが発生したためプラグイン 'GSI-VTDownloader-master'を読み込めませんでした

ImportError: cannot import name 'WKBWriter' from 'shapely.geos' (C:\PROGRA~1\QGIS32~1.6\apps\Python39\lib\site-packages\shapely\geos.py) Traceback (most recent call last): File "C:\PROGRA~1/QGIS32~1.6/apps/qgis-ltr/./python\qgis\utils.py", line 423, in _startPlugin plugins[packageName] = package.classFactory(iface) File "C:\Users/user_name/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GSI-VTDownloader-master__init__.py", line 35, in classFactory from .vtdownloader import VTDownloader File "C:\PROGRA~1/QGIS32~1.6/apps/qgis-ltr/./python\qgis\utils.py", line 888, in _import mod = _builtin_import(name, globals, locals, fromlist, level) File "C:\Users/user_name/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GSI-VTDownloader-master\vtdownloader.py", line 30, in from .vtdownloader_dialog import VTDownloaderDialog File "C:\PROGRA~1/QGIS32~1.6/apps/qgis-ltr/./python\qgis\utils.py", line 888, in _import mod = _builtin_import(name, globals, locals, fromlist, level) File "C:\Users/user_name/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GSI-VTDownloader-master\vtdownloader_dialog.py", line 33, in from .gsi_geojson_generator import GsiGeojsonGenerator File "C:\PROGRA~1/QGIS32~1.6/apps/qgis-ltr/./python\qgis\utils.py", line 888, in _import mod = _builtin_import(name, globals, locals, fromlist, level) File "C:\Users/user_name/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GSI-VTDownloader-master\gsi_geojson_generator.py", line 14, in from .exlib.shapely import geometry as shapely_geometry File "C:\PROGRA~1/QGIS32~1.6/apps/qgis-ltr/./python\qgis\utils.py", line 888, in _import mod = _builtin_import(name, globals, locals, fromlist, level) File "C:\Users/user_name/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GSI-VTDownloader-master\exlib\shapely\geometry__init__.py", line 4, in from .base import CAP_STYLE, JOIN_STYLE File "C:\PROGRA~1/QGIS32~1.6/apps/qgis-ltr/./python\qgis\utils.py", line 888, in _import mod = _builtin_import(name, globals, locals, fromlist, level) File "C:\Users/user_name/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GSI-VTDownloader-master\exlib\shapely\geometry\base.py", line 20, in from shapely.geos import WKBWriter, WKTWriter ImportError: cannot import name 'WKBWriter' from 'shapely.geos' (C:\PROGRA~1\QGIS32~1.6\apps\Python39\lib\site-packages\shapely\geos.py)

Pythonバージョン: 3.9.5 (tags/v3.9.5:0a7dcbd, May 3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] QGISバージョン: 3.28.6-Firenze Firenze, 868c9fa03b

Pythonパス: C:\Users/user_name/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\inyouzuMaker C:\Users/user_name/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\hxmlimport C:/PROGRA~1/QGIS32~1.6/apps/qgis-ltr/./python C:/Users/user_name/AppData/Roaming/QGIS/QGIS3\profiles\default/python C:/Users/user_name/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins C:/PROGRA~1/QGIS32~1.6/apps/qgis-ltr/./python/plugins C:\PROGRA~1\QGIS32~1.6\apps\grass\grass82\etc\python C:\Users\user_name\Documents C:\Program Files\QGIS 3.28.6\bin\python39.zip C:\PROGRA~1\QGIS32~1.6\apps\Python39\DLLs C:\PROGRA~1\QGIS32~1.6\apps\Python39\lib C:\Program Files\QGIS 3.28.6\bin C:\Users\user_name\AppData\Roaming\Python\Python39\site-packages C:\PROGRA~1\QGIS32~1.6\apps\Python39 C:\PROGRA~1\QGIS32~1.6\apps\Python39\lib\site-packages C:\PROGRA~1\QGIS32~1.6\apps\Python39\lib\site-packages\win32 C:\PROGRA~1\QGIS32~1.6\apps\Python39\lib\site-packages\win32\lib C:\PROGRA~1\QGIS32~1.6\apps\Python39\lib\site-packages\Pythonwin C:/Users/user_name/AppData/Roaming/QGIS/QGIS3\profiles\default/python C:\Users/user_name/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\qgis2web C:\Users\user_name\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins . C:/Users/user_name/AppData/Roaming/QGIS/QGIS3/profiles/default =====================ここまで

iwamoto-osamu commented 9 months ago

いつもお世話になっております、私も同じようなエラーが出るようになりました。 別のQGISのバージョンとGSI-VTDownloderを組み合わせても同様でした。 解決策があれば教えていただけると助かります、どうぞよろしくお願いします。 現在は、windows10 pro(64bit)と、windows11 home(64bit)で試しています。

classFactory()メソッドの呼び出し時にエラーが発生したためプラグイン 'GSI-VTDownloader-master'を読み込めませんでした

ImportError: cannot import name 'WKBWriter' from 'shapely.geos' (C:\PROGRA~1\QGIS33~1.1\apps\Python39\lib\site-packages\shapely\geos.py) Traceback (most recent call last): File "C:\PROGRA~1/QGIS33~1.1/apps/qgis/./python\qgis\utils.py", line 423, in _startPlugin plugins[packageName] = package.classFactory(iface) File "C:\Users/t3189/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GSI-VTDownloader-master__init__.py", line 35, in classFactory from .vtdownloader import VTDownloader File "C:\PROGRA~1/QGIS33~1.1/apps/qgis/./python\qgis\utils.py", line 888, in _import mod = _builtin_import(name, globals, locals, fromlist, level) File "C:\Users/t3189/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GSI-VTDownloader-master\vtdownloader.py", line 30, in from .vtdownloader_dialog import VTDownloaderDialog File "C:\PROGRA~1/QGIS33~1.1/apps/qgis/./python\qgis\utils.py", line 888, in _import mod = _builtin_import(name, globals, locals, fromlist, level) File "C:\Users/t3189/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GSI-VTDownloader-master\vtdownloader_dialog.py", line 33, in from .gsi_geojson_generator import GsiGeojsonGenerator File "C:\PROGRA~1/QGIS33~1.1/apps/qgis/./python\qgis\utils.py", line 888, in _import mod = _builtin_import(name, globals, locals, fromlist, level) File "C:\Users/t3189/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GSI-VTDownloader-master\gsi_geojson_generator.py", line 14, in from .exlib.shapely import geometry as shapely_geometry File "C:\PROGRA~1/QGIS33~1.1/apps/qgis/./python\qgis\utils.py", line 888, in _import mod = _builtin_import(name, globals, locals, fromlist, level) File "C:\Users/t3189/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GSI-VTDownloader-master\exlib\shapely\geometry__init__.py", line 4, in from .base import CAP_STYLE, JOIN_STYLE File "C:\PROGRA~1/QGIS33~1.1/apps/qgis/./python\qgis\utils.py", line 888, in _import mod = _builtin_import(name, globals, locals, fromlist, level) File "C:\Users/t3189/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins\GSI-VTDownloader-master\exlib\shapely\geometry\base.py", line 20, in from shapely.geos import WKBWriter, WKTWriter ImportError: cannot import name 'WKBWriter' from 'shapely.geos' (C:\PROGRA~1\QGIS33~1.1\apps\Python39\lib\site-packages\shapely\geos.py)

Pythonバージョン: 3.9.5 (tags/v3.9.5:0a7dcbd, May 3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] QGISバージョン: 3.34.1-Prizren Prizren, 133927424d

Pythonパス: C:/PROGRA~1/QGIS33~1.1/apps/qgis/./python C:/Users/t3189/AppData/Roaming/QGIS/QGIS3\profiles\default/python C:/Users/t3189/AppData/Roaming/QGIS/QGIS3\profiles\default/python/plugins C:/PROGRA~1/QGIS33~1.1/apps/qgis/./python/plugins C:\PROGRA~1\QGIS33~1.1\apps\grass\grass83\etc\python C:\Users\t3189\Documents C:\Program Files\QGIS 3.34.1\bin\python39.zip C:\PROGRA~1\QGIS33~1.1\apps\Python39\DLLs C:\PROGRA~1\QGIS33~1.1\apps\Python39\lib C:\Program Files\QGIS 3.34.1\bin C:\PROGRA~1\QGIS33~1.1\apps\Python39 C:\PROGRA~1\QGIS33~1.1\apps\Python39\lib\site-packages C:\PROGRA~1\QGIS33~1.1\apps\Python39\lib\site-packages\win32 C:\PROGRA~1\QGIS33~1.1\apps\Python39\lib\site-packages\win32\lib C:\PROGRA~1\QGIS33~1.1\apps\Python39\lib\site-packages\Pythonwin C:/Users/t3189/AppData/Roaming/QGIS/QGIS3\profiles\default/python

Kanahiro commented 9 months ago

QGISに内蔵されているShapelyのバージョンが上がったことで、一部の関数が削除されたことが原因と思われます。 古いバージョンのQGIS(Shapely<2.0.0)を利用することが、単純な迂回策となります。

ちゃんとした対応のためには:

iwamoto-osamu commented 9 months ago

ご助言ありがとうございました。古いバージョンのQGISとクリーンインストールしたwindows10を準備して試してみたいと思います。

tohka commented 5 months ago

現行の GSI-VTDownloader は ./exlib の中に shapely 1.8dev を同梱していますが、この shapely 内部での from shapely.geos import WKBWriter, WKTWriter といった自身の呼び出しに際し、 QGIS 同梱の 新しいバージョンの shapely を読みにいってしまい、バージョン齟齬でエラーが生じているようです。

対症療法的には __init__.py の冒頭あたりで下記を記載し、 ./exlib の優先度をあげ、プラグイン同梱の shapely が確実に使用されるようにする方法。

import sys, os
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'exlib'))

あるいは ./exlib/shapely を削除し、また gsi_geojson_generator.py でもシステムの方の shapely を使うようにする方法。

--- gsi_geojson_generator.py.org        2024-05-02 21:26:06.131702800 +0900
+++ gsi_geojson_generator.py    2024-05-02 21:26:19.774687900 +0900
@@ -13,3 +13,3 @@
 from .exlib import tiletanic
-from .exlib.shapely import geometry as shapely_geometry
+from shapely import geometry as shapely_geometry
 from . import settings

上記いずれかで、回避できていそうな感じです。 ただ古いバージョンなどでの動作確認はできておりません。