conda-forge / mayavi-feedstock

A conda-smithy repository for mayavi.
BSD 3-Clause "New" or "Revised" License
4 stars 18 forks source link

Removal of pyqt<6 pin breaks Mayavi api call #83

Closed moorepants closed 2 months ago

moorepants commented 3 months ago

Solution to issue cannot be found in the documentation.

Issue

The package yeadon has a mayavi app included. If I do:

conda create -n yeadon-test yeadon mayavi

and try to open the app I get this error:

(yeadon-test) $ yeadon
Traceback (most recent call last):
  File "/home/moorepants/miniconda/envs/yeadon-test/bin/yeadon", line 7, in <module>
    from yeadon.app import run
  File "/home/moorepants/miniconda/envs/yeadon-test/lib/python3.12/site-packages/yeadon/__init__.py", line 11, in <module>
    from yeadon.gui import start_gui
  File "/home/moorepants/miniconda/envs/yeadon-test/lib/python3.12/site-packages/yeadon/gui.py", line 19, in <module>
    class YeadonGUI(HasTraits):
  File "/home/moorepants/miniconda/envs/yeadon-test/lib/python3.12/site-packages/yeadon/gui.py", line 58, in YeadonGUI
    editor=SceneEditor(scene_class=MayaviScene), height=580, width=430,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/moorepants/miniconda/envs/yeadon-test/lib/python3.12/site-packages/pyface/base_toolkit.py", line 165, in __init__
    raise NotImplementedError(msg % (toolkit, package, name))
NotImplementedError: the null tvtk.pyface.ui.null backend doesn't implement scene_editor:SceneEditor

If I then do:

conda create -n yeadon-test yeadon mayavi "pyqt<6"

The app runs as expected.

PR #82 removed the pyqt pin.

Also reported here: https://github.com/conda-forge/yeadon-feedstock/issues/25

I may need to report this to MayaVi. Maybe the support for PyQt6 is not fully tested or something.

Installed packages

# packages in environment at /home/moorepants/miniconda/envs/yeadon-test:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                 conda_forge    conda-forge
_openmp_mutex             4.5                       2_gnu    conda-forge
aiohttp                   3.9.5           py312h98912ed_0    conda-forge
aiosignal                 1.3.1              pyhd8ed1ab_0    conda-forge
alsa-lib                  1.2.12               h4ab18f5_0    conda-forge
aom                       3.9.1                hac33072_0    conda-forge
apptools                  5.1.0              pyh44b312d_0    conda-forge
attr                      2.5.1                h166bdaf_1    conda-forge
attrs                     23.2.0             pyh71513ae_0    conda-forge
blosc                     1.21.6               hef167b5_0    conda-forge
bzip2                     1.0.8                hd590300_5    conda-forge
c-ares                    1.28.1               hd590300_0    conda-forge
ca-certificates           2024.7.4             hbcca054_0    conda-forge
cairo                     1.18.0               h3faef2a_0    conda-forge
configobj                 5.0.8              pyhd8ed1ab_0    conda-forge
dav1d                     1.2.1                hd590300_0    conda-forge
dbus                      1.13.6               h5008d03_3    conda-forge
double-conversion         3.3.0                h59595ed_0    conda-forge
eigen                     3.4.0                h00ab1b0_0    conda-forge
envisage                  6.0.1              pyhd8ed1ab_0    conda-forge
expat                     2.6.2                h59595ed_0    conda-forge
ffmpeg                    6.1.1           gpl_h853fe30_113    conda-forge
font-ttf-dejavu-sans-mono 2.37                 hab24e00_0    conda-forge
font-ttf-inconsolata      3.000                h77eed37_0    conda-forge
font-ttf-source-code-pro  2.038                h77eed37_0    conda-forge
font-ttf-ubuntu           0.83                 h77eed37_2    conda-forge
fontconfig                2.14.2               h14ed4e7_0    conda-forge
fonts-conda-ecosystem     1                             0    conda-forge
fonts-conda-forge         1                             0    conda-forge
freetype                  2.12.1               h267a509_2    conda-forge
fribidi                   1.0.10               h36c2ea0_0    conda-forge
frozenlist                1.4.1           py312h98912ed_0    conda-forge
gettext                   0.22.5               h59595ed_2    conda-forge
gettext-tools             0.22.5               h59595ed_2    conda-forge
gl2ps                     1.4.2                hae5d5c5_1    conda-forge
glew                      2.1.0                h9c3ff4c_2    conda-forge
glib                      2.80.2               hf974151_0    conda-forge
glib-tools                2.80.2               hb6ce0ca_0    conda-forge
gmp                       6.3.0                hac33072_2    conda-forge
gnutls                    3.7.9                hb077bed_0    conda-forge
graphite2                 1.3.13            h59595ed_1003    conda-forge
gst-plugins-base          1.24.4               h9ad1361_0    conda-forge
gstreamer                 1.24.4               haf2f30d_0    conda-forge
harfbuzz                  8.5.0                hfac3d4d_0    conda-forge
hdf4                      4.2.15               h2a13503_7    conda-forge
hdf5                      1.14.3          nompi_hdf9ad27_105    conda-forge
icu                       73.2                 h59595ed_0    conda-forge
idna                      3.7                pyhd8ed1ab_0    conda-forge
importlib-metadata        8.0.0              pyha770c72_0    conda-forge
importlib_metadata        8.0.0                hd8ed1ab_0    conda-forge
importlib_resources       6.4.0              pyhd8ed1ab_0    conda-forge
jsoncpp                   1.9.5                h4bd325d_1    conda-forge
keyutils                  1.6.1                h166bdaf_0    conda-forge
krb5                      1.21.3               h659f571_0    conda-forge
lame                      3.100             h166bdaf_1003    conda-forge
ld_impl_linux-64          2.40                 hf3520f5_7    conda-forge
lerc                      4.0.0                h27087fc_0    conda-forge
libabseil                 20240116.2      cxx17_h59595ed_0    conda-forge
libaec                    1.1.3                h59595ed_0    conda-forge
libasprintf               0.22.5               h661eb56_2    conda-forge
libasprintf-devel         0.22.5               h661eb56_2    conda-forge
libass                    0.17.1               h8fe9dca_1    conda-forge
libblas                   3.9.0           22_linux64_openblas    conda-forge
libcap                    2.69                 h0f662aa_0    conda-forge
libcblas                  3.9.0           22_linux64_openblas    conda-forge
libclang-cpp15            15.0.7          default_h127d8a8_5    conda-forge
libclang-cpp18.1          18.1.8          default_h36b48a3_0    conda-forge
libclang13                18.1.8          default_h6ae225f_0    conda-forge
libcups                   2.3.3                h4637d8d_4    conda-forge
libcurl                   8.8.0                hca28451_1    conda-forge
libdeflate                1.20                 hd590300_0    conda-forge
libdrm                    2.4.122              h4ab18f5_0    conda-forge
libedit                   3.1.20191231         he28a2e2_2    conda-forge
libev                     4.33                 hd590300_2    conda-forge
libevent                  2.1.12               hf998b51_1    conda-forge
libexpat                  2.6.2                h59595ed_0    conda-forge
libffi                    3.4.2                h7f98852_5    conda-forge
libflac                   1.4.3                h59595ed_0    conda-forge
libgcc-ng                 14.1.0               h77fa898_0    conda-forge
libgcrypt                 1.11.0               h4ab18f5_0    conda-forge
libgettextpo              0.22.5               h59595ed_2    conda-forge
libgettextpo-devel        0.22.5               h59595ed_2    conda-forge
libgfortran-ng            14.1.0               h69a702a_0    conda-forge
libgfortran5              14.1.0               hc5f4f2c_0    conda-forge
libglib                   2.80.2               hf974151_0    conda-forge
libglu                    9.0.0             hac7e632_1003    conda-forge
libgomp                   14.1.0               h77fa898_0    conda-forge
libgpg-error              1.50                 h4f305b6_0    conda-forge
libhwloc                  2.11.0          default_h5622ce7_1000    conda-forge
libiconv                  1.17                 hd590300_2    conda-forge
libidn2                   2.3.7                hd590300_0    conda-forge
libjpeg-turbo             3.0.0                hd590300_1    conda-forge
liblapack                 3.9.0           22_linux64_openblas    conda-forge
libllvm15                 15.0.7               hb3ce162_4    conda-forge
libllvm18                 18.1.8               hc9dba70_0    conda-forge
libnetcdf                 4.9.2           nompi_h135f659_114    conda-forge
libnghttp2                1.58.0               h47da74e_1    conda-forge
libnsl                    2.0.1                hd590300_0    conda-forge
libogg                    1.3.5                h4ab18f5_0    conda-forge
libopenblas               0.3.27          pthreads_h413a1c8_0    conda-forge
libopenvino               2024.2.0             h2da1b83_1    conda-forge
libopenvino-auto-batch-plugin 2024.2.0             hb045406_1    conda-forge
libopenvino-auto-plugin   2024.2.0             hb045406_1    conda-forge
libopenvino-hetero-plugin 2024.2.0             h5c03a75_1    conda-forge
libopenvino-intel-cpu-plugin 2024.2.0             h2da1b83_1    conda-forge
libopenvino-intel-gpu-plugin 2024.2.0             h2da1b83_1    conda-forge
libopenvino-intel-npu-plugin 2024.2.0             he02047a_1    conda-forge
libopenvino-ir-frontend   2024.2.0             h5c03a75_1    conda-forge
libopenvino-onnx-frontend 2024.2.0             h07e8aee_1    conda-forge
libopenvino-paddle-frontend 2024.2.0             h07e8aee_1    conda-forge
libopenvino-pytorch-frontend 2024.2.0             he02047a_1    conda-forge
libopenvino-tensorflow-frontend 2024.2.0             h39126c6_1    conda-forge
libopenvino-tensorflow-lite-frontend 2024.2.0             he02047a_1    conda-forge
libopus                   1.3.1                h7f98852_1    conda-forge
libpciaccess              0.18                 hd590300_0    conda-forge
libpng                    1.6.43               h2797004_0    conda-forge
libpq                     16.3                 ha72fbe1_0    conda-forge
libprotobuf               4.25.3               h08a7969_0    conda-forge
libsndfile                1.2.2                hc60ed4a_1    conda-forge
libsqlite                 3.46.0               hde9e2c9_0    conda-forge
libssh2                   1.11.0               h0841786_0    conda-forge
libstdcxx-ng              14.1.0               hc0a3c3a_0    conda-forge
libsystemd0               255                  h3516f8a_1    conda-forge
libtasn1                  4.19.0               h166bdaf_0    conda-forge
libtheora                 1.1.1             h4ab18f5_1006    conda-forge
libtiff                   4.6.0                h1dd3fc0_3    conda-forge
libunistring              0.9.10               h7f98852_0    conda-forge
libuuid                   2.38.1               h0b41bf4_0    conda-forge
libva                     2.21.0               h4ab18f5_2    conda-forge
libvorbis                 1.3.7                h9c3ff4c_0    conda-forge
libvpx                    1.14.1               hac33072_0    conda-forge
libwebp-base              1.4.0                hd590300_0    conda-forge
libxcb                    1.15                 h0b41bf4_0    conda-forge
libxcrypt                 4.4.36               hd590300_1    conda-forge
libxkbcommon              1.7.0                h662e7e4_0    conda-forge
libxml2                   2.12.7               hc051c1a_1    conda-forge
libzip                    1.10.1               h2629f0a_3    conda-forge
libzlib                   1.3.1                h4ab18f5_1    conda-forge
loguru                    0.7.2           py312h7900ff3_1    conda-forge
lz4-c                     1.9.4                hcb278e6_0    conda-forge
mayavi                    4.8.2           py312h7d5288c_3    conda-forge
mpg123                    1.32.6               h59595ed_0    conda-forge
msgpack-python            1.0.8           py312h2492b07_0    conda-forge
multidict                 6.0.5           py312h98912ed_0    conda-forge
mysql-common              8.3.0                hf1915f5_4    conda-forge
mysql-libs                8.3.0                hca2cd23_4    conda-forge
ncurses                   6.5                  h59595ed_0    conda-forge
nettle                    3.9.1                h7ab15ed_0    conda-forge
nlohmann_json             3.11.3               h59595ed_0    conda-forge
nspr                      4.35                 h27087fc_0    conda-forge
nss                       3.102                h593d115_0    conda-forge
numpy                     2.0.0           py312h22e1c76_0    conda-forge
ocl-icd                   2.3.2                hd590300_1    conda-forge
openh264                  2.4.1                h59595ed_0    conda-forge
openssl                   3.3.1                h4ab18f5_1    conda-forge
p11-kit                   0.24.1               hc5aa10d_0    conda-forge
pcre2                     10.43                hcad00b1_0    conda-forge
pip                       24.0               pyhd8ed1ab_0    conda-forge
pixman                    0.43.2               h59595ed_0    conda-forge
proj                      9.3.1                h1d62c97_0    conda-forge
pthread-stubs             0.4               h36c2ea0_1001    conda-forge
pugixml                   1.14                 h59595ed_0    conda-forge
pulseaudio-client         17.0                 hb77b528_0    conda-forge
pyface                    8.0.0              pyhd8ed1ab_1    conda-forge
pygments                  2.18.0             pyhd8ed1ab_0    conda-forge
python                    3.12.4          h194c7f8_0_cpython    conda-forge
python_abi                3.12                    4_cp312    conda-forge
pyyaml                    6.0.1           py312h98912ed_1    conda-forge
qt-main                   5.15.8              hc9dc06e_21    conda-forge
qt6-main                  6.7.2                h402ef58_0    conda-forge
readline                  8.2                  h8228510_1    conda-forge
setuptools                70.1.1             pyhd8ed1ab_0    conda-forge
six                       1.16.0             pyh6c4a22f_0    conda-forge
snappy                    1.2.1                ha2e4443_0    conda-forge
sqlite                    3.46.0               h6d4b2fc_0    conda-forge
svt-av1                   2.1.0                hac33072_0    conda-forge
tbb                       2021.12.0            h434a139_2    conda-forge
tbb-devel                 2021.12.0            h2069b90_2    conda-forge
tk                        8.6.13          noxft_h4845f30_101    conda-forge
traits                    6.4.3           py312h98912ed_0    conda-forge
traitsui                  8.0.0              pyhd8ed1ab_0    conda-forge
tzdata                    2024a                h0c530f3_0    conda-forge
utfcpp                    4.0.5                ha770c72_0    conda-forge
vtk                       9.3.0           qt_py312h1234567_200    conda-forge
vtk-base                  9.3.0           qt_py312h1234567_200    conda-forge
vtk-io-ffmpeg             9.3.0           qt_py312h1234567_200    conda-forge
wayland                   1.23.0               h5291e77_0    conda-forge
wheel                     0.43.0             pyhd8ed1ab_1    conda-forge
wslink                    2.1.1              pyhd8ed1ab_0    conda-forge
x264                      1!164.3095           h166bdaf_2    conda-forge
x265                      3.5                  h924138e_3    conda-forge
xcb-util                  0.4.0                hd590300_1    conda-forge
xcb-util-cursor           0.1.4                hd590300_1    conda-forge
xcb-util-image            0.4.0                h8ee46fc_1    conda-forge
xcb-util-keysyms          0.4.0                h8ee46fc_1    conda-forge
xcb-util-renderutil       0.3.9                hd590300_1    conda-forge
xcb-util-wm               0.4.1                h8ee46fc_1    conda-forge
xkeyboard-config          2.42                 h4ab18f5_0    conda-forge
xorg-fixesproto           5.0               h7f98852_1002    conda-forge
xorg-kbproto              1.0.7             h7f98852_1002    conda-forge
xorg-libice               1.1.1                hd590300_0    conda-forge
xorg-libsm                1.2.4                h7391055_0    conda-forge
xorg-libx11               1.8.9                h8ee46fc_0    conda-forge
xorg-libxau               1.0.11               hd590300_0    conda-forge
xorg-libxdmcp             1.1.3                h7f98852_0    conda-forge
xorg-libxext              1.3.4                h0b41bf4_2    conda-forge
xorg-libxfixes            5.0.3             h7f98852_1004    conda-forge
xorg-libxrender           0.9.11               hd590300_0    conda-forge
xorg-libxt                1.3.0                hd590300_1    conda-forge
xorg-renderproto          0.11.1            h7f98852_1002    conda-forge
xorg-xextproto            7.3.0             h0b41bf4_1003    conda-forge
xorg-xf86vidmodeproto     2.3.1             h7f98852_1002    conda-forge
xorg-xproto               7.0.31            h7f98852_1007    conda-forge
xz                        5.2.6                h166bdaf_0    conda-forge
yaml                      0.2.5                h7f98852_2    conda-forge
yarl                      1.9.4           py312h98912ed_0    conda-forge
yeadon                    1.5.0           py312h7900ff3_0    conda-forge
zipp                      3.19.2             pyhd8ed1ab_0    conda-forge
zlib                      1.3.1                h4ab18f5_1    conda-forge
zstd                      1.5.6                ha6fb4c9_0    conda-forge

Environment info

active environment : yeadon-test
    active env location : /home/moorepants/miniconda/envs/yeadon-test
            shell level : 1
       user config file : /home/moorepants/.condarc
 populated config files : /home/moorepants/.condarc
          conda version : 24.5.0
    conda-build version : 24.5.1
         python version : 3.11.9.final.0
                 solver : libmamba (default)
       virtual packages : __archspec=1=skylake
                          __conda=24.5.0=0
                          __glibc=2.39=0
                          __linux=6.8.0=0
                          __unix=0=0
       base environment : /home/moorepants/miniconda  (writable)
      conda av data dir : /home/moorepants/miniconda/etc/conda
  conda av metadata url : None
           channel URLs : https://conda.anaconda.org/conda-forge/linux-64
                          https://conda.anaconda.org/conda-forge/noarch
          package cache : /home/moorepants/miniconda/pkgs
                          /home/moorepants/.conda/pkgs
       envs directories : /home/moorepants/miniconda/envs
                          /home/moorepants/.conda/envs
               platform : linux-64
             user-agent : conda/24.5.0 requests/2.32.3 CPython/3.11.9 Linux/6.8.0-36-generic ubuntu/24.04 glibc/2.39 solver/libmamba conda-libmamba-solver/24.1.0 libmambapy/1.5.8
                UID:GID : 1000:1000
             netrc file : /home/moorepants/.netrc
           offline mode : False
moorepants commented 3 months ago
conda create -n yeadon-test yeadon mayavi pyqt

also allows the app to run, so I guess it is related to the missing pyqt dependency instead of dropping the pin.

larsoner commented 3 months ago

Yeah the idea is that mayavi (maybe) shouldn't choose which Qt you want to use. Because it also works with PySide6, you could also do

conda install mayavi pyside6

for example. And installing pyside6 and pyqt5 simultaneously is problematic on some systems, so removing it as a dependency a reasonable way to get a choice between the two. The downside is that it does force a choice.

Another less invasive option than #82 would be to add a mayavi-base package without pyqt5 and restore the mayavi package to what it was. Or another option would be to use build variants like vtk does for example. Maybe either of those is a better choice since it's more backward compatible.

moorepants commented 3 months ago

I guess in this case it would be helpful if conda has some kind of way to check to make sure 1 of n backends are installed and if not, pick a default choice to install.

larsoner commented 2 months ago

I guess in this case it would be helpful if conda has some kind of way to check to make sure 1 of n backends are installed and if not, pick a default choice to install.

Agreed! I don't know of anything like that but we could use build variants. #84 for example should make it so that (once merged and deployed etc.) you can do conda install mayavi to get mayavi + pyqt as before (i.e., fix the regression), or conda install mayavi=*=*pyside6 to get the pyside6 variant if you want to use pyside6 (i.e., add the enhancement of there being some way to safely use mayavi with PySide6). There's no difference in the mayavi functionality or code, just in what its run requirements are in the package.

moorepants commented 2 months ago

That looks like the appropriate solution. Thanks!

moorepants commented 2 months ago

I just tried this:

$ conda create -n yeadon-test yeadon mayavi=*=*pyside6
Channels:
 - conda-forge
Platform: linux-64
Collecting package metadata (repodata.json): done
Solving environment: failed

PackagesNotFoundError: The following packages are not available from current channels:

  - mayavi=[build=*pyside6]

Current channels:

  - https://conda.anaconda.org/conda-forge

To search for alternate channels that may provide the conda package you're
looking for, navigate to

    https://anaconda.org

and use the search bar at the top of the page.
larsoner commented 2 months ago

Sorry my suggestion was wrong -- try mayavi=*=pyside6*, it should work. The star needs to be to the right since the build string is for example pyside6_py312h9ed9eab_104.

$ conda create -n mayavi mayavi=*=pyside6_*
Channels:
 - conda-forge
Platform: linux-64
Collecting package metadata (repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /home/larsoner/mne-python/1.6.0_0/envs/mayavi

  added / updated specs:
    - mayavi[build=pyside6_*]

The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
...
moorepants commented 2 months ago

That works, thanks!