What’s new in h5py 2.10

New features

  • HDF5 8-bit bitfield data can now be read either as uint8 or booleans (GH821). Pytables stores booleans as this type. For now, you must pick which type to use explicitly:

    with dset.astype(numpy.uint8):   # or numpy.bool
        arr = dset[:]
  • Numpy arrays of integers can now be used for fancy indexing, where previously a Python list was required (GH963).

  • Fancy indexing now allows an empty list or array (GH1174).

  • IPython can now tab-complete names in h5py groups and attributes without any special user action (GH1228). This simple completion only matches the first level of keys in a group, not subkeys. You can still call h5py.enable_ipython_completion() for more complete results.

  • The libver parameter for File now accepts 'v108' and 'v110' to specify compatibility with HDF5 1.8 or 1.10 (GH1155). See Version bounding for details.

  • New functions and constants for getting and identifying special data types - string_dtype(), vlen_dtype(), enum_dtype(), ref_dtype and regionref_dtype replace special_dtype(). For identifying string, vlen and enum dtypes, check_string_dtype(), check_vlen_dtype() and check_enum_dtype() replace check_dtype() (GH1132).

  • A new method make_scale() to conveniently make a dataset into a dimension scale (GH830, GH1212).

  • A new method AttributeManager.get_id() to get a low-level AttrID object referring to an attribute (GH1278).

  • Several examples were updated to run on Python 3 (GH1149).


  • The default behaviour of h5py.File with no specified mode is deprecated (GH1143). It currently tries to create a file or open it for read/write access, silently falling back to read-only depending on permissions. From h5py 3.0, the default will be read-only.

    Ideally, code should pass an explicit mode each time a file is opened:

    h5py.File("example.h5", "r")

    The possible modes are described in Opening & creating files. If you want to suppress the deprecation warnings from code you can’t modify, you can either:

    • set h5.get_config().default_file_mode = 'r' (or another available mode)
    • or set the environment variable H5PY_DEFAULT_READONLY to any non-empty string, to adopt the future default.
  • This is expected to be the last h5py release to support Python 2.7 and 3.4.

Exposing HDF5 functions

  • H5Zunregister exposed as h5z.unregister_filter() (GH746, GH1224).
  • The new module h5py.h5pl module exposes various H5PL functions to inspect and modify the search path for plugins (GH1166, GH1256).
  • H5Dread_chunk exposed as h5d.read_direct_chunk() (GH1190).


  • Fix crash with empty variable-length data (GH1248, GH1253).
  • Fixed random selection of data type when reading 64-bit floats on Windows where Python uses random dictionary order (GH1051, GH1134).
  • Pickling h5py objects now fails explicitly. It previously failed on unpickling, and we can’t reliably serialise and restore handles to HDF5 objects anyway (GH531, GH1194). If you need to use these objects in other processes, you could explicitly serialise the filename and the name of the object inside the file. Or consider h5pickle, which does the same implicitly.
  • Creating a dataset with external storage can no longer mutate the external list parameter passed in (GH1205). It also has improved error messages (GH1204).
  • Certain deprecation warnings will now show the relevant line of code which uses the deprecated feature (GH1146).
  • Skipped a failing test for complex floating point numbers on 32-bit x86 systems (GH1235).
  • Disabled the longdouble type on the ppc64le architecture, as it was causing segfaults with more commonly used float types (GH1243).
  • Documented that nested compound types are not currently supported (GH1236).
  • Fixed attribute create method to be consistent with __setattr__ (GH1265).

Building h5py

  • The version of HDF5 can now be automatically detected on Windows (GH1123).
  • Fixed autodetecting the version from libhdf5 in default locations on Windows and Mac (GH1240).
  • Fail to build if it can’t detect version from libhdf5, rather than assuming 1.8.4 as a default (GH1241).
  • Building h5py from source on Unix platforms now requires either pkg-config or an explicitly specified path to HDF5 (GH1231). Previously it had a hardcoded default path, but when this was wrong, the failures were unnecessarily confusing.
  • The Cython ‘language level’ is now explicitly set to 2, to prepare h5py for changing defaults in Cython (GH1171).
  • Avoid using setup_requires when pip calls setup.py egg_info (GH1259).


  • h5py’s tests are now run by pytest (GH1003), and coverage reports are automatically generated on Codecov.