2013-11-16 2 views
0

Недавно я обновил таблицы на моей установке на python, и некоторые странные вещи, похоже, происходят с библиотеками HDF5.Не удается открыть файлы matlab с использованием новейших 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: [email protected] 
     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 

Затем он ломает питон и сбрасывает меня обратно в оболочку.

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

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

ответ

1

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

Очевидно, у pip и anaconda есть два разных соглашения об именах для PyTables. Пип называет это «таблицами», и Анаконда называет это «pytables».

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

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

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

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

+1

Спасибо за объяснение решения, которое вы нашли - сегодня я столкнулся с той же проблемой. Поэтому просто упомянем явные строки, которые я ввел после прочтения вашего замечательного объяснения: 'pip uninstall tables' ' conda install pytables' –

Смежные вопросы