Repository navigation
Closed
Description
Describe the bug
I cannot pip install pvlib using Python 3.15.2 due to the h5py dependency apparently not yet being supported.
To Reproduce
Steps to reproduce the behavior:
- Create a Python 3.15.2 venv.
pip install pvlib- See error:
Building wheels for collected packages: h5py
Building wheel for h5py (pyproject.toml) ... error
error: subprocess-exited-with-error
× Building wheel for h5py (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [78 lines of output]
running bdist_wheel
running build
running build_py
creating build/lib.macosx-26.6-arm64-cpython-315/h5py
copying h5py/h5py_warnings.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py
copying h5py/version.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py
copying h5py/__init__.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py
copying h5py/ipy_completer.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py
creating build/lib.macosx-26.6-arm64-cpython-315/h5py/_hl
copying h5py/_hl/files.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/_hl
copying h5py/_hl/compat.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/_hl
copying h5py/_hl/__init__.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/_hl
copying h5py/_hl/selections.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/_hl
copying h5py/_hl/dataset.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/_hl
copying h5py/_hl/vds.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/_hl
copying h5py/_hl/selections2.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/_hl
copying h5py/_hl/group.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/_hl
copying h5py/_hl/datatype.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/_hl
copying h5py/_hl/attrs.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/_hl
copying h5py/_hl/dims.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/_hl
copying h5py/_hl/base.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/_hl
copying h5py/_hl/filters.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/_hl
creating build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_dimension_scales.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_attribute_create.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_file_image.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/conftest.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_h5d_direct_chunk.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_h5f.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_dataset_getitem.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_h5z.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_group.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_errors.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_dataset_swmr.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_slicing.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_native_complex.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_h5pl.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_attrs.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/__init__.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_attrs_data.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_h5t.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_big_endian_file.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_h5p.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_dims_dimensionproxy.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_h5o.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_datatype.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/common.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_h5s.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_dataset.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_file.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_selections.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_ros3.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_dtype.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_h5.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_file2.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_completions.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_filters.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_base.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_objects.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_npystrings.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
copying h5py/tests/test_file_alignment.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests
creating build/lib.macosx-26.6-arm64-cpython-315/h5py/tests/data_files
copying h5py/tests/data_files/__init__.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests/data_files
creating build/lib.macosx-26.6-arm64-cpython-315/h5py/tests/test_vds
copying h5py/tests/test_vds/test_highlevel_vds.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests/test_vds
copying h5py/tests/test_vds/test_virtual_source.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests/test_vds
copying h5py/tests/test_vds/__init__.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests/test_vds
copying h5py/tests/test_vds/test_lowlevel_vds.py -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests/test_vds
copying h5py/tests/data_files/compound-dtype-complex.h5 -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests/data_files
copying h5py/tests/data_files/vlen_string_s390x.h5 -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests/data_files
copying h5py/tests/data_files/vlen_string_dset_utc.h5 -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests/data_files
copying h5py/tests/data_files/vlen_string_dset.h5 -> build/lib.macosx-26.6-arm64-cpython-315/h5py/tests/data_files
running build_ext
Loading library to get build settings and version: libhdf5.dylib
error: Unable to load dependency HDF5, make sure HDF5 is installed properly
on sys.platform='darwin' with platform.machine()='arm64'
Library dirs checked: []
error: dlopen(libhdf5.dylib, 0x0006): tried: 'libhdf5.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibhdf5.dylib' (no such file), '/opt/homebrew/opt/openssl@4/lib/libhdf5.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/opt/openssl@4/lib/libhdf5.dylib' (no such file), '/Users/markcampanelli/.pyenv/versions/3.15.2/lib/libhdf5.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/markcampanelli/.pyenv/versions/3.15.2/lib/libhdf5.dylib' (no such file), '/opt/homebrew/lib/libhdf5.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/lib/libhdf5.dylib' (no such file), '/opt/homebrew/opt/openssl@4/lib/libhdf5.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/opt/openssl@4/lib/libhdf5.dylib' (nosuch file), '/Users/markcampanelli/.pyenv/versions/3.15.2/lib/libhdf5.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/markcampanelli/.pyenv/versions/3.15.2/lib/libhdf5.dylib' (no such file), '/opt/homebrew/lib/libhdf5.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/lib/libhdf5.dylib' (no such file), '/usr/lib/libhdf5.dylib' (no such file, not in dyld cache), 'libhdf5.dylib' (no such file)
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for h5py
Failed to build h5py
Expected behavior
pvlib installs
Screenshots
None
Versions:
pvlib.__version__: v0.16.1pandas.__version__: N/A- python: 3.15.2
- os: MacOS 26.6.2 (also fails in ubuntu in my Github CI)
Additional context
Apparently wheels are not yet available for h5py. Putting a hard upper bound on Python at <3.15 until pvlib has been tested against it would have saved me a lot of time.
Metadata
Metadata
Assignees
Labels
No labels
Activity
echedey-ls commentedon Nov 14, 2026
Xref h5py/h5py#2993
How much?
It took me like 11 mins cause I had to compile python 3.15 for my system (but h5py wheel did compile successfully, IDK why). It would have been easier to make a Py3.15 support PR and see its outcome, for sure.
Details
markcampanelli commentedon Nov 14, 2026
Thanks for the issue link. I'll keep an eye on it.
It broke first in
pvfit's CI after I added 3.15 to the Python build matrix. Google AI gave multiple answers on how to fix (missing library for linker?), which was different between at least Ubuntu and macOS. I'd rather just wait for PyPI wheels than start complecting my build scripts based on OS. (I didn't even get to the Windows CI builds, which may have actually been ok. I don't use Windows locally.)I get that this might be considered a "soft" breakage, as
pvlibmight not be expected to have all batteries included (such as dependency wheels).Other things that I spent time on were the "optional" extras, where the DoE amazingly seems to have yanked
nrel-pysamfrom PyPI andsolarfactorsis a circular dependency. Admittedly, I was "poking around" when these popped up.One thought I had was to try to instead use the
tablesoption topandasto read in the h5 files (which essentially swaps theh5pydependency forPyTables), but apparently for some reason that would require ah5file-formatting change.Python version updates often, dare I say usually, break stuff. My ultimate workaround to update
pvfitbuilds to start allowing Python 3.15 was to skip thepvliboptional install on Python 3.15 and put a skip decorator on the test of the one demo script that usespvlib. Notice how the situation is somewhat messy, but the incompatibility and workaround at least have some reasonably visible guardrails. Note also that the CI is apparently set up to build without expecting any compilers and such, which is probably good for users.See also
williamhobbs commentedon Nov 14, 2026
I think you should be using
nlr-pysamnow. Both are still on pypi (https://pypi.org/project/NLR-PySAM/, https://pypi.org/project/NREL-PySAM/)pip show nlr-pysamdoesn't find a package for some reason, butpip install nlr-pysamseems to work just fine.Edit: related: #2871
markcampanelli commentedon Nov 14, 2026
Draft PR to solve this: #2945
I'm happy to chase down conda-only test failures, so long as maintainers are ok with the upper bound on Python version.
echedey-ls commentedon Nov 14, 2026
@williamhobbs
https://pip.pypa.io/en/stable/cli/pip_show/
@markcampanelli this issue deserves a PR on py3.15 support in the tests CI/CD - the nrel-pysam to nrl-pysam is addressed in #2872