To add to the mess, it seems like on macOS, they have not updated Python beyond 3.9:
This means installing the plugin through qGIS’s Plugin Manager fails with the following error:
Couldn't load plugin 'speckle-qgis' due to an error when calling its classFactory() method
ImportError: C extension: None not built. If you want to import pandas from the source directory, you may need to run 'python setup.py build_ext' to build the C extensions first.
Traceback (most recent call last):
File "/Users/daniel/.config/Speckle/connector_installations/QGIS/pandas/__init__.py", line 26, in
from pandas.compat import (
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/qgis/utils.py", line 923, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/Users/daniel/.config/Speckle/connector_installations/QGIS/pandas/compat/__init__.py", line 26, in
from pandas.compat.numpy import is_numpy_dev
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/qgis/utils.py", line 923, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/Users/daniel/.config/Speckle/connector_installations/QGIS/pandas/compat/numpy/__init__.py", line 21, in
raise ImportError(
ImportError: this version of pandas is incompatible with numpy your numpy version is 1.20.1.
Please upgrade numpy to >= 1.22.4 to use this pandas version
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/qgis/utils.py", line 426, in _startPlugin
plugins[packageName] = package.classFactory(iface)
File "/Users/daniel/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/speckle-qgis/__init__.py", line 32, in classFactory
from speckle_qgis import SpeckleQGIS
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/qgis/utils.py", line 923, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/Users/daniel/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/speckle-qgis/speckle_qgis.py", line 58, in
from plugin_utils.object_utils import callback, traverseObject
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/qgis/utils.py", line 923, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/Users/daniel/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/speckle-qgis/plugin_utils/object_utils.py", line 7, in
from speckle.converter.layers.layer_conversions import (
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/qgis/utils.py", line 923, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/Users/daniel/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/speckle-qgis/speckle/converter/layers/layer_conversions.py", line 67, in
from speckle.converter.geometry.point import (
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/qgis/utils.py", line 923, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/Users/daniel/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/speckle-qgis/speckle/converter/geometry/point.py", line 12, in
from speckle.converter.geometry.utils import (
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/qgis/utils.py", line 923, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/Users/daniel/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins/speckle-qgis/speckle/converter/geometry/utils.py", line 19, in
import geopandas as gpd
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/qgis/utils.py", line 923, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/Users/daniel/.config/Speckle/connector_installations/QGIS/geopandas/__init__.py", line 1, in
from geopandas._config import options # noqa
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/qgis/utils.py", line 923, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/Users/daniel/.config/Speckle/connector_installations/QGIS/geopandas/_config.py", line 109, in
default_value=_default_use_pygeos(),
File "/Users/daniel/.config/Speckle/connector_installations/QGIS/geopandas/_config.py", line 95, in _default_use_pygeos
import geopandas._compat as compat
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/qgis/utils.py", line 923, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/Users/daniel/.config/Speckle/connector_installations/QGIS/geopandas/_compat.py", line 8, in
import pandas as pd
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/qgis/utils.py", line 923, in _import
mod = _builtin_import(name, globals, locals, fromlist, level)
File "/Users/daniel/.config/Speckle/connector_installations/QGIS/pandas/__init__.py", line 31, in
raise ImportError(
ImportError: C extension: None not built. If you want to import pandas from the source directory, you may need to run 'python setup.py build_ext' to build the C extensions first.
Python version: 3.9.5 (default, Sep 10 2021, 16:18:19) [Clang 12.0.5 (clang-1205.0.22.11)]
QGIS version: 3.36.3-Maidenhead Maidenhead, 2df9655469b
Python Path:
/Users/daniel/.config/Speckle/connector_installations/QGIS
/Users/daniel/.config/Speckle/connector_installations/QGIS
/Users/daniel/.config/Speckle/connector_installations/QGIS
/Users/daniel/.config/Speckle/connector_installations/QGIS
/Users/daniel/.config/Speckle/connector_installations/QGIS
/Users/daniel/.config/Speckle/connector_installations/QGIS
/Users/daniel/.config/Speckle/connector_installations/QGIS
/Applications/QGIS.app/Contents/MacOS/../Resources/python
/Users/daniel/Library/Application Support/QGIS/QGIS3/profiles/default/python
/Users/daniel/Library/Application Support/QGIS/QGIS3/profiles/default/python/plugins
/Applications/QGIS.app/Contents/MacOS/../Resources/python/plugins
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/lib-dynload
/Applications/QGIS.app/Contents/MacOS/lib/python39.zip
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/Pillow-7.2.0-py3.9-macosx-10.13.0-x86_64.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/geopandas-0.8.1-py3.9.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/netCDF4-1.5.4-py3.9-macosx-10.13.0-x86_64.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/statsmodels-0.11.1-py3.9-macosx-10.13.0-x86_64.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/opencv_contrib_python-4.3.0.36-py3.9-macosx-10.13.0-x86_64.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/pandas-1.3.3-py3.9-macosx-10.13.0-x86_64.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/numpy-1.20.1-py3.9-macosx-10.13.0-x86_64.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/Rtree-0.9.7-py3.9-macosx-10.13.0-x86_64.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/GDAL-3.3.2-py3.9-macosx-10.13.0-x86_64.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/pyproj-3.2.0-py3.9-macosx-10.13.0-x86_64.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/patsy-0.5.1-py3.9.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/Fiona-1.8.13.post1-py3.9-macosx-10.13.0-x86_64.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/scipy-1.5.1-py3.9-macosx-10.13.0-x86_64.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/matplotlib-3.3.0-py3.9-macosx-10.13.0-x86_64.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/rasterio-1.1.5-py3.9-macosx-10.13.0-x86_64.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/cftime-1.2.1-py3.9-macosx-10.13.0-x86_64.egg
/Applications/QGIS.app/Contents/MacOS/lib/python3.9/site-packages/numba-0.50.1-py3.9-macosx-10.13.0-x86_64.egg
/Users/daniel/Library/Application Support/QGIS/QGIS3/profiles/default/python