cf-units doesn't install with pip on Python 3.12.3
🐛 Bug Report
I am unable to install cf-units using a Python venv together with pip using Python version 3.12.3. I get an error message saying that wheel failed to build for cf-units (see attached traceback).
How to Reproduce
Steps to reproduce the behaviour:
- Create a python virtual environment:
python -m venv .venv - Activate it:
source .venv/bin/activate - Upgrade pip:
python -m pip install --upgrade pip - Try to install cf-units:
python -m pip install cf-units
Expected Behaviour
cf-units installs without issues.
Environment
- OS & Version: Fedora 40 Silverblue
- cf-units Version: 3.2.0 (the one that it tries to install)
- Python Version: 3.12.3
- pip Version: 24.0
Additional Context
Click to expand this section...
(.venv) michael@localhost:~/src/koding/test$ python -m pip install cf-units
Collecting cf-units
Using cached cf-units-3.2.0.tar.gz (165 kB)
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing metadata (pyproject.toml) ... done
Collecting antlr4-python3-runtime==4.7.2 (from cf-units)
Using cached antlr4_python3_runtime-4.7.2-py3-none-any.whl
Collecting cftime>=1.2 (from cf-units)
Using cached cftime-1.6.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (8.7 kB)
Collecting jinja2 (from cf-units)
Using cached jinja2-3.1.4-py3-none-any.whl.metadata (2.6 kB)
Collecting numpy (from cf-units)
Using cached numpy-2.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (60 kB)
Collecting MarkupSafe>=2.0 (from jinja2->cf-units)
Using cached MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.0 kB)
Using cached cftime-1.6.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB)
Using cached numpy-2.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (19.0 MB)
Using cached jinja2-3.1.4-py3-none-any.whl (133 kB)
Using cached MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (28 kB)
Building wheels for collected packages: cf-units
Building wheel for cf-units (pyproject.toml) ... error
error: subprocess-exited-with-error
× Building wheel for cf-units (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [19 lines of output]
Traceback (most recent call last):
File "/var/home/michael/src/koding/test/.venv/lib64/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
main()
File "/var/home/michael/src/koding/test/.venv/lib64/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
json_out['return_val'] = hook(**hook_input['kwargs'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/home/michael/src/koding/test/.venv/lib64/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 251, in build_wheel
return _build_backend().build_wheel(wheel_directory, config_settings,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/pip-build-env-_zcl5ayp/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 410, in build_wheel
return self._build_with_temp_dir(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/pip-build-env-_zcl5ayp/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 395, in _build_with_temp_dir
self.run_setup()
File "/tmp/pip-build-env-_zcl5ayp/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 311, in run_setup
exec(code, locals())
File "<string>", line 152, in <module>
File "<string>", line 75, in get_package_data
ValueError: Require to set UDUNITS2_XML_PATH for a cf-units wheel build.
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for cf-units
Failed to build cf-units
ERROR: Could not build wheels for cf-units, which is required to install pyproject.toml-based projects
There are no wheels for py312. You need to build it from source there. You will need udunits2 to build it from source.
In the OSGeo/grass-addons repo, trying to use Python 3.12thus creating a wheel locally fails even in CI. Is it possible to take a new look at this? We are getting closer to the next 3.13 release in October than we are from the last 3.12 release
I guess we need #423 since that adds support for py312. Then of course we need a new release.
I see... I postponed the migration to Python 3.12 (I was syncing the CI workflows with the changes that the non-addons repo grass was using, and the new release would have used 3.12 by default).
I guess we need #423 since that adds support for py312. Then of course we need a new release.
I believe that we don't need #423, PR #368, that was already merged, would do. I am building cf-units for Python 3.12 in conda-forge for a while now. All we need is a new release here. Note that #427 would be nice though, that one adds numpy 2.0 support.
@SciTools/peloton We agree that a release is perhaps overdue for this, @pp-mo @bjlittle will be looking into this.
Just to confirm from a conversation with @bjlittle: the error reported by @huaracheguarache (love the name!) is always expected - UDUNITS2 is not available via Pip and must therefore always be installed by other means (e.g. Conda). This is part of the motive for #446.
As for the various other comments - which are not truly related to this error - we have made progress in the last few days:
- #423
- #461
- #427 - hoping to complete today in a fresh pull request
After that I'm assuming a release won't be far away @pp-mo?