Не удается открыть файлы Matlab с использованием последней версии HDF5

Недавно я обновил таблицы в своей установке Python, и, похоже, с библиотеками HDF5 происходят некоторые странные вещи.

У меня есть куча данных, которые изначально были сохранены в виде файла .mat, в котором используется формат HDF5. Я читал это в python с помощью pyTables, и до сих пор это работало нормально.

Я обновляю pyTables до версии 3.0, и похоже, что это также должно было обновить мою установку HDF5 (или что-то в этом роде). Теперь каждый раз, когда я пытаюсь прочитать файл .mat в памяти, я получаю следующую ошибку:

Warning! ***HDF5 library version mismatched error***
The HDF5 header files used to compile this application do not match
the version used by the HDF5 library to which this application is linked.
Data corruption or segmentation faults may occur if the application continues.
This can happen when an application was compiled by one version of HDF5 but
linked with a different version of static or shared HDF5 library.
You should recompile the application or check your shared library related
settings such as 'LD_LIBRARY_PATH'.
You can, at your own risk, disable this warning by setting the environment
variable 'HDF5_DISABLE_VERSION_CHECK' to a value of '1'.
Setting it to 2 or higher will suppress the warning messages totally.
Headers are 1.8.5, library is 1.8.9
        SUMMARY OF THE HDF5 CONFIGURATION
        =================================

General Information:
-------------------
           HDF5 Version: 1.8.9
          Configured on: Tue Sep 11 15:02:44 CDT 2012
          Configured by: ilan@centos5x86
         Configure mode: production
            Host system: x86_64-unknown-linux-gnu
          Uname information: Linux centos5x86 2.6.18-308.el5 #1 SMP Tue Feb 21 20:06:06 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
               Byte sex: little-endian
              Libraries:
         Installation point: /opt/anaconda1anaconda2anaconda3

Compiling Options:
------------------
               Compilation Mode: production
                     C Compiler: /usr/bin/gcc ( gcc (GCC) 4.1.2 20080704 )
                         CFLAGS:
                      H5_CFLAGS: -std=c99 -pedantic -Wall -Wextra -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline -Wno-long-long -Wfloat-equal -Wmissing-format-attribute -Wmissing-noreturn -Wpacked -Wdisabled-optimization -Wformat=2 -Wunreachable-code -Wendif-labels -Wdeclaration-after-statement -Wold-style-definition -Winvalid-pch -Wvariadic-macros -Wnonnull -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros -Wunsafe-loop-optimizations -Wc++-compat -Wvolatile-register-var -O3 -fomit-frame-pointer -finline-functions
                      AM_CFLAGS:
                       CPPFLAGS:
                    H5_CPPFLAGS: -D_POSIX_C_SOURCE=199506L   -DNDEBUG -UH5_DEBUG_API
                    AM_CPPFLAGS: -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_BSD_SOURCE
               Shared C Library: yes
               Static C Library: no
  Statically Linked Executables: no
                        LDFLAGS:
                     H5_LDFLAGS:
                     AM_LDFLAGS:
        Extra libraries:  -lz -lrt -lm
               Archiver: ar
             Ranlib: ranlib
          Debugged Packages:
            API Tracing: no

Languages:
----------
                        Fortran: no

                            C++: no

Features:
---------
                  Parallel HDF5: no
             High Level library: yes
                   Threadsafety: no
            Default API Mapping: v18
 With Deprecated Public Symbols: yes
         I/O filters (external): deflate(zlib)
         I/O filters (internal): shuffle,fletcher32,nbit,scaleoffset
                            MPE: no
                     Direct VFD: no
                        dmalloc: no
Clear file buffers before write: yes
           Using memory checker: no
         Function Stack Tracing: no
                           GPFS: no
      Strict File Format Checks: no
   Optimization Instrumentation: no
       Large File Support (LFS): yes
Bye...
Aborted

Затем он ломает python и возвращает меня обратно в оболочку.

Я попытался понизить свои pyTables до версии до 3.0, но это не помогает. Я также пытался повторно открыть в Matlab и снова сохранить, но это все еще не работает.

Любые идеи, что происходит не так? Похоже, что Matlab сохраняет другую версию HDF5, чем та, которую предполагает pyTables. Кажется, мне следует либо обновить библиотеку Matlab HDF5, либо понизить версию Python, но я не могу понять, как это сделать...


person choldgraf    schedule 16.11.2013    source источник


Ответы (1)


Хорошо, я понял, в чем проблема. По сути, это был конфликт версий. (почему это всегда конфликт версий?)

По-видимому, pip и anaconda имеют два разных соглашения об именах для PyTables. Pip называет это «таблицами», а Anaconda — «pytables».

Итак, когда я запустил conda install tables, анаконда искала таблицы, не нашла их и по умолчанию использовала pip. Затем Пип нашел таблицы и установил их.

Проблема в том, что PyTables уже был установлен в дистрибутиве anaconda, просто он назывался "pytables".

Итак, теперь у меня было две разные версии таблиц в одном и том же дистрибутиве: одна была установлена ​​​​через pip, а другая — через anaconda. Это делало всевозможные шаткие вещи и приводило к вышеуказанной ошибке.

Итак, извлеченный урок: никогда не думайте, что гигантские репозитории пакетов гарантируют, что они называют вещи одним и тем же. :П

person choldgraf    schedule 16.11.2013
comment
Спасибо за объяснение найденного вами решения - сегодня я столкнулся с той же проблемой. Итак, просто упомянем явные строки, которые я ввел после прочтения вашего замечательного объяснения: pip uninstall tables conda install pytables - person Matthias Fischer; 19.08.2015