cf-python icon indicating copy to clipboard operation
cf-python copied to clipboard

Conda, dependency clash when installing cf-python and cf-plot alongside Jupyter.

Open ThatDesert opened this issue 9 months ago • 3 comments

A description of the issue.

If you try to install Jupyter in a Conda environment after installing cf-python, cf-plot, and their dependencies, a package conflict will occur. However, if Jupyter is installed first, and then the cf libraries, no such error takes place and everything works as it should.

What you expected to happen.

All packages install in any order without issue.

The steps needed to reproduce it.

  1. Create a new Conda environment.
  2. Install cf-python, cf-plot, udunits2, and esmpy in the environment.
$ conda install -c conda-forge cf-python cf-plot udunits2
$ conda install -c conda-forge "esmpy>=8.7.0"
  1. Attempt to install Jupyter.
$ conda install jupyter
  1. Command fails stating incompatible packages, see traceback below...

Any traceback information.

Channels:
 - defaults
Platform: linux-64
Collecting package metadata (repodata.json): done
Solving environment: failed

LibMambaUnsatisfiableError: Encountered problems while solving:
  - package esmpy-8.8.1-pyhecae5ae_0 requires esmf 8.8.1.*, but none of the providers can be installed

Could not solve for environment specs
The following packages are incompatible
├─ esmpy >=8.7.0 * is installable and it requires
│  └─ esmf =8.8.1 *, which requires
│     └─ hdf5 >=1.14.6,<1.14.7.0a0 *, which requires
│        └─ libzlib >=1.3.1,<2.0a0 *, which requires
│           └─ zlib ==1.3.1 *_2, which can be installed;
├─ jupyter =* * is installable with the potential options
│  ├─ jupyter 1.0.0 would require
│  │  └─ python >=2.7,<2.8.0a0 *, which can be installed;
│  ├─ jupyter [1.0.0|1.1.1] would require
│  │  └─ python >=3.10,<3.11.0a0 *, which can be installed;
│  ├─ jupyter [1.0.0|1.1.1] would require
│  │  └─ python >=3.11,<3.12.0a0 *, which can be installed;
│  ├─ jupyter [1.0.0|1.1.1] would require
│  │  └─ qtconsole =* * with the potential options
│  │     ├─ qtconsole [4.3.1|4.4.0|4.4.1|4.4.2|4.4.3] would require
│  │     │  └─ python >=2.7,<2.8.0a0 *, which can be installed;
│  │     ├─ qtconsole [4.3.1|4.4.0|4.4.1] would require
│  │     │  └─ python >=3.5,<3.6.0a0 *, which can be installed;
│  │     ├─ qtconsole [4.3.1|4.4.0|4.4.1|4.4.2|4.4.3] would require
│  │     │  └─ python >=3.6,<3.7.0a0 *, which can be installed;
│  │     ├─ qtconsole [4.3.1|4.4.0|...|5.4.0] would require
│  │     │  └─ python >=3.7,<3.8.0a0 *, which can be installed;
│  │     ├─ qtconsole [5.3.1|5.3.2|...|5.6.1] would require
│  │     │  └─ python >=3.10,<3.11.0a0 *, which can be installed;
│  │     ├─ qtconsole [5.3.1|5.3.2|...|5.6.0] would require
│  │     │  └─ python >=3.8,<3.9.0a0 *, which can be installed;
│  │     ├─ qtconsole [5.3.1|5.3.2|...|5.6.1] would require
│  │     │  └─ python >=3.9,<3.10.0a0 *, which can be installed;
│  │     ├─ qtconsole [5.3.2|5.4.0|...|5.6.1] would require
│  │     │  └─ python >=3.11,<3.12.0a0 *, which can be installed;
│  │     ├─ qtconsole [4.4.4|4.5.1|...|5.6.1] would require
│  │     │  └─ pyqt =* * with the potential options
│  │     │     ├─ pyqt [5.15.10|5.15.7|5.9.2|6.7.1] would require
│  │     │     │  └─ python >=3.10,<3.11.0a0 *, which can be installed;
│  │     │     ├─ pyqt [5.15.10|5.15.7|6.7.1] would require
│  │     │     │  └─ python >=3.11,<3.12.0a0 *, which can be installed;
│  │     │     ├─ pyqt 5.15.10 would require
│  │     │     │  └─ qt-main >=5.15.2,<5.16.0a0 * but there are no viable options
│  │     │     │     ├─ qt-main 5.15.2 would require
│  │     │     │     │  └─ zlib >=1.2.13,<1.3.0a0 *, which conflicts with any installable versions previously reported;
│  │     │     │     └─ qt-main 5.15.2 would require
│  │     │     │        └─ zlib >=1.2.12,<1.3.0a0 *, which conflicts with any installable versions previously reported;
│  │     │     ├─ pyqt [5.15.10|6.7.1] would require
│  │     │     │  └─ python >=3.13,<3.14.0a0 *, which can be installed;
│  │     │     ├─ pyqt [5.15.10|5.15.7|5.9.2] would require
│  │     │     │  └─ python >=3.8,<3.9.0a0 *, which can be installed;
│  │     │     ├─ pyqt [5.15.10|5.15.7|5.9.2|6.7.1] would require
│  │     │     │  └─ python >=3.9,<3.10.0a0 *, which can be installed;
│  │     │     ├─ pyqt [5.15.7|5.6.0|5.9.2] would require
│  │     │     │  └─ python >=3.7,<3.8.0a0 *, which can be installed;
│  │     │     ├─ pyqt [5.6.0|5.9.2] would require
│  │     │     │  └─ python >=2.7,<2.8.0a0 *, which can be installed;
│  │     │     ├─ pyqt [5.6.0|5.9.2] would require
│  │     │     │  └─ python >=3.5,<3.6.0a0 *, which can be installed;
│  │     │     ├─ pyqt [5.6.0|5.9.2] would require
│  │     │     │  └─ python >=3.6,<3.7.0a0 *, which can be installed;
│  │     │     └─ pyqt 6.7.1 would require
│  │     │        └─ qtsvg [>=6.7.2,<6.8.0a0 *|>=6.7.3,<6.8.0a0 *], which requires
│  │     │           └─ zlib >=1.2.13,<1.3.0a0 *, which conflicts with any installable versions previously reported;
│  │     └─ qtconsole 5.6.1 would require
│  │        └─ python >=3.13,<3.14.0a0 *, which can be installed;
│  ├─ jupyter 1.0.0 would require
│  │  └─ python >=3.5,<3.6.0a0 *, which can be installed;
│  ├─ jupyter 1.0.0 would require
│  │  └─ python >=3.6,<3.7.0a0 *, which can be installed;
│  ├─ jupyter 1.0.0 would require
│  │  └─ python >=3.7,<3.8.0a0 *, which can be installed;
│  ├─ jupyter 1.0.0 would require
│  │  └─ python >=3.8,<3.9.0a0 *, which can be installed;
│  ├─ jupyter [1.0.0|1.1.1] would require
│  │  └─ python >=3.9,<3.10.0a0 *, which can be installed;
│  └─ jupyter 1.1.1 would require
│     └─ python >=3.13,<3.14.0a0 *, which can be installed;
└─ pin on python 3.12.* =* * is not installable because it requires
   └─ python =3.12 *, which conflicts with any installable versions previously reported.

Pins seem to be involved in the conflict. Currently pinned specs:
 - python=3.12

The version of the software and the environment in which you are encountering an issue.

Platform: Linux-6.6.87.2-microsoft-standard-WSL2-x86_64-with-glibc2.39
Conda: 25.5.1
Python: 3.12.11
packaging: 25.0
numpy: 2.3.2
cfdm.core: 1.12.2.0
udunits2 library: /home/olaxko/miniconda3/envs/ncas-cf-test2/lib/libudunits2.so.0
HDF5 library: 1.14.6
netcdf library: 4.9.2
netCDF4: 1.7.2
h5netcdf: 1.6.3
h5py: 3.14.0
zarr: 3.1.1
s3fs: 2025.7.0
scipy: 1.16.0
dask: 2025.7.0
cftime: 1.6.4
cfunits: 3.3.7
cfdm: 1.12.2.0
esmpy/ESMF: 8.8.1
psutil: 7.0.0
matplotlib: 3.10.5
cfplot: 3.4.0
cf: 3.18.0

Solution

A solution to this seems to be to install Jupyter before cf, but if this also happens with packages beyond Jupyter, then this may prevent installation of any packages in the environment once one installs cf.

ThatDesert avatar Aug 05 '25 15:08 ThatDesert

Thanks for reporting this Ollie! We will look into it in due course.

sadielbartholomew avatar Aug 05 '25 15:08 sadielbartholomew

Thanks for sharing the traceback information - very useful.

From a closer look that I can see that the issue only crops up for Python 3.12 rather than any other version of Python we support (at the moment that is 3.9 to 3.12). I created a fresh environment with 3.10 to test this and then installed first jupyter and then the CF Data Tools as per the standard commands you quote above, and it all works.

So it would be good to clarify that this is only an issue for Python 3.12. I'll mention this as a review on your PR.

sadielbartholomew avatar Aug 06 '25 17:08 sadielbartholomew

Thanks for this - I've added the NEXTVERSION milestone, as it would be good to get this into next week's release.

davidhassell avatar Aug 07 '25 07:08 davidhassell