failing tests due to PyQt missing dependencies
Hello,
I am preparing for the Ewoks tutorial and I wanted to try my local laptop installation (WSL Ubuntu) of ewoks. Here what I did:
mamba create -n ewokstuto python=3.9
conda activate ewokstuto
pip install ewoks[orange,dask,ppf,test]
#all went fine
pytest --pyargs ewoks.tests
Unfortunately, Orange complains about PyQt (trace below). I can easily install Orange via conda and have this solved, but I wanted to report this in order to improve the installation issues.
Thanks, Mauro
============================= test session starts ==============================
platform linux -- Python 3.9.18, pytest-7.4.3, pluggy-1.3.0
rootdir: /home/mauro/devel/ewoks_tuto2312
plugins: anyio-4.1.0
collected 54 items
test_cli.py ................................................. [ 90%]
test_notebooks.py s [ 92%]
test_projects.py ...F [100%]
=================================== FAILURES ===================================
___________________________ test_import[ewoksorange] ___________________________
project = 'ewoksorange'
@pytest.mark.parametrize(
"project", ["ewokscore", "ewoksdask", "ewoksppf", "ewoksorange"]
)
def test_import(project):
> importlib.import_module(project)
../../local/mambaforge/envs/ewokstuto/lib/python3.9/site-packages/ewoks/tests/test_projects.py:9:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../local/mambaforge/envs/ewokstuto/lib/python3.9/importlib/__init__.py:127: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
<frozen importlib._bootstrap>:1030: in _gcd_import
???
<frozen importlib._bootstrap>:1007: in _find_and_load
???
<frozen importlib._bootstrap>:986: in _find_and_load_unlocked
???
<frozen importlib._bootstrap>:680: in _load_unlocked
???
<frozen importlib._bootstrap_external>:850: in exec_module
???
<frozen importlib._bootstrap>:228: in _call_with_frames_removed
???
../../local/mambaforge/envs/ewokstuto/lib/python3.9/site-packages/ewoksorange/__init__.py:1: in <module>
from .bindings import load_graph # noqa: F401
../../local/mambaforge/envs/ewokstuto/lib/python3.9/site-packages/ewoksorange/bindings/__init__.py:1: in <module>
from .progress import * # noqa
../../local/mambaforge/envs/ewokstuto/lib/python3.9/site-packages/ewoksorange/bindings/progress.py:1: in <module>
from AnyQt.QtCore import pyqtSignal as Signal
../../local/mambaforge/envs/ewokstuto/lib/python3.9/site-packages/AnyQt/QtCore.py:1: in <module>
from . import _api
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
"""
NOTE: Importing this module will select and commit to a Qt API.
"""
import os
import sys
import warnings
import AnyQt
if sys.version_info < (3,):
_intern = intern
else:
_intern = sys.intern
USED_API = None
QT_API_PYQT6 = "pyqt6"
QT_API_PYQT5 = "pyqt5"
QT_API_PYQT4 = "pyqt4"
QT_API_PYSIDE6 = "pyside6"
QT_API_PYSIDE2 = "pyside2"
QT_API_PYSIDE = "pyside"
ALL_APIS = [
QT_API_PYQT6, QT_API_PYQT5, QT_API_PYQT4,
QT_API_PYSIDE6, QT_API_PYSIDE2, QT_API_PYSIDE
]
def comittoapi(api):
"""
Commit to the use of specified Qt api.
Raise an error if another Qt api is already loaded in sys.modules
"""
global USED_API
assert USED_API is None, "committoapi called again!"
check = ["PyQt4", "PyQt5", "PyQt6", "PySide", "PySide2", "PySide6"]
assert api in ALL_APIS
for name in check:
if name.lower() != api and name in sys.modules:
raise RuntimeError(
"{} was already imported. Cannot commit to {}!"
.format(name, api)
)
else:
api = _intern(api)
USED_API = api
AnyQt.__SELECTED_API = api
AnyQt.USED_API = api
if AnyQt.__SELECTED_API is not None:
comittoapi(AnyQt.__SELECTED_API)
elif "QT_API" in os.environ:
api = os.environ["QT_API"].lower()
if api == "pyqt":
# Qt.py allows both pyqt4 and pyqt to specify PyQt4.
# When run from anaconda-navigator, pyqt is used.
api = "pyqt4"
if api in ALL_APIS:
comittoapi(api)
else:
warnings.warn(
"'QT_API' environment variable names an unknown Qt API ('{}')."
.format(os.environ["QT_API"]),
RuntimeWarning, stacklevel=3)
# pass through
if USED_API is None:
# Check sys.modules for existing imports
__existing = None
if "PyQt6" in sys.modules:
__existing = QT_API_PYQT6
elif "PyQt5" in sys.modules:
__existing = QT_API_PYQT5
elif "PyQt4" in sys.modules:
__existing = QT_API_PYQT4
elif "PySide6" in sys.modules:
__existing = QT_API_PYSIDE6
elif "PySide2" in sys.modules:
__existing = QT_API_PYSIDE2
elif "PySide" in sys.modules:
__existing = QT_API_PYSIDE
if __existing is not None:
comittoapi(__existing)
else:
available = AnyQt.availableapi()
__available = None
if AnyQt.__PREFERRED_API is not None and \
AnyQt.__PREFERRED_API.lower() in [name.lower() for name in available]:
__available = AnyQt.__PREFERRED_API.lower()
elif "PyQt5" in available:
__available = QT_API_PYQT5
elif "PyQt4" in available:
__available = QT_API_PYQT4
elif "PySide" in available:
__available = QT_API_PYSIDE
elif "PySide2" in available:
__available = QT_API_PYSIDE2
elif "PyQt6" in available:
__available = QT_API_PYQT6
if __available is not None:
comittoapi(__available)
del __available
del __existing
if USED_API is None:
> raise ImportError("PyQt4, PyQt5, PySide or PySide2 are not available for import")
E ImportError: PyQt4, PyQt5, PySide or PySide2 are not available for import
../../local/mambaforge/envs/ewokstuto/lib/python3.9/site-packages/AnyQt/_api.py:116: ImportError
=============================== warnings summary ===============================
../../local/mambaforge/envs/ewokstuto/lib/python3.9/site-packages/jupyter_client/connect.py:22
/home/mauro/local/mambaforge/envs/ewokstuto/lib/python3.9/site-packages/jupyter_client/connect.py:22: DeprecationWarning: Jupyter is migrating its paths to use standard platformdirs
given by the platformdirs library. To remove this warning and
see the appropriate new directories, set the environment variable
`JUPYTER_PLATFORM_DIRS=1` and then run `jupyter --paths`.
The use of platformdirs will be the default in `jupyter_core` v6
from jupyter_core.paths import jupyter_data_dir, jupyter_runtime_dir, secure_write
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED test_projects.py::test_import[ewoksorange] - ImportError: PyQt4, PyQt5...
============== 1 failed, 52 passed, 1 skipped, 1 warning in 2.22s ==============
Edited by Mauro Rovezzi