I’m trying to implement a VOL which supports h5py’s f.keys()
functionality. I’m using 1.14.2 version for HDF5 and built h5py based on it. During testing, I found h5py calls H5literate_by_name1
as it prompts an error “ValueError: H5literate_by_name1 is only meant to be used with the native vol connector”. But according to the documents, H5literate_by_name1 is deprecated and H5literate_by_name macro should map to H5literate_by_name2 function.
h5py uses an older version of the API (1.10) which is incompatible with the VOL layer in many places. You can rebuild h5py to use a different API version by changing this line in setup_build.py
. For 1.12 or 1.14, the versions that should support the VOL layer, the macro would be H5_USE_112_API
or H5_USE_114_API
.
That said, I’m not sure if h5py supports these newer APIs. I ran into a similar problem last year and made an issue about it, but it hasn’t received a response from anyone working on h5py.
I tried to change the API version to H5_USE_112_API
or H5_USE_114_API
but it makes h5py fail to build and prompt errors like “defs.c:46426:15: error: too few arguments to function ‘H5Sencode2’”. Are you able to rebuild h5py with modified API version?
No, it looks like h5py still doesn’t support using a newer API. For the time being, your application will need to avoid using any h5py calls that use old version of the library API, including f.keys()
.
OK I see. Thanks a lot.