2016-03-28 13 views
6

Ich weiß nicht, warum diese Pakete immer so schwer zu installieren sind. Ich benutze NetCDF/HDF5 schon seit langer Zeit und es war schon immer ein reiner Horrortrip, sie zu installieren oder richtig laufen zu lassen, egal ob auf Linux oder OSX, egal ob C, C++ oder jetzt Python. Die einfache Abhängigkeit zwischen netcdf4 und hdf5 ist eine Quelle großer Schmerzen für viele Leute und ich wünschte wirklich, die Entwickler dieser Pakete würden endlich etwas dagegen tun.Python, NetCDF4 und HDF5

Also, das neueste konkrete Problem, mit dem ich konfrontiert bin, ist dies: Ich versuche netCDF4 für Python zu installieren. Ich erhalte die folgende Fehlermeldung:

Package hdf5 was not found in the pkg-config search path 
Perhaps you should add the directory containing `hdf5.pc' 

Ich versuchte, die hdf5 Pakete mit apt-get, einschließlich zu installieren:

  • libhdf5-Seriell-dev
  • libhdf5-Serien
  • libhdf5-7
  • python-h5py
  • libhdf5-dev
  • hdf5-Tools
  • hdf5-Helfer
  • libhdf5-7-dbg

pip benutzen, habe ich versucht:

pip install h5py 

die kläglich eine Abhängigkeit Cython zu lösen gescheitert, die ich dann manuell installiert. Danach hat es (anscheinend) installiert, aber ich finde die Datei hdf5.pc nirgends.

Ich ziehe meine Haare hier raus. Kann jemand dieses Problem umgehen?

+3

Haben Sie in Betracht gezogen, Anaconda zu verwenden? Alle Ihre Installationsprobleme werden verschwinden :) – jhamman

Antwort

1

Wenn Sie Verteilungspakete und selbst erstellte Pakete mischen, erhöhen Sie Ihre Chance auf Probleme (wie Sie herausfinden).

Wollen Sie auch h5py oder möchten Sie netcdf-Python? Ich glaube nicht, dass netcdf-python eine Abhängigkeit von h5py hat. Stattdessen bindet netcdf-python an die C-netcdf-Bibliothek, die wiederum von der C HDF5-Bibliothek abhängt.

h5py bindet ebenfalls an C HDF5

Es gibt eine Menge von Software beteiligt, es ist wahr. Arbeiten Sie Ihren Weg durch Schritt für Schritt, und es wird mehr Sinn machen, schließlich (sagt der Mann, der diese für 15 Jahre getan hat ... es wird leichter!)

  1. Wenn Sie die parallele Programmierung tun werden, Sie benötigen eine MPI-Implementierung
  2. HDF5 bietet jetzt die Grundlage für NetCDF4. Wenn Sie eine parallele Programmierung wünschen, bauen Sie HDF5 gegen Ihre MPI-Implementierung auf.
  3. Installieren Sie die C-Bibliothek von NetCDF4
  4. jetzt die Python-Bindungen können abholen, was sie von NetCDF4 benötigen, HDF5 und MPI

Ja es eine Menge Software zu konfigurieren und zu bauen. pkg-config kann hier sehr helfen! Wenn Sie Package hdf5 was not found in the pkg-config search path sehen, sollten Sie Ihre PKG_CONFIG_DIR so einstellen, dass sie auf den Speicherort der Paketkonfigurationsdateien zeigt.Leider bietet hdf5 keine .pc (package-config) -Datei, also müssen Sie diesen Teil nur von Hand machen. Oh, und netcdf stellt auch keine pkg-config zur Verfügung: Es stellt ein Skript nc-config zur Verfügung, das netcdf-python benutzen wird.

Lassen Sie mich ein konkretes Beispiel geben:

  • MPICH-Master installiert in /home/robl/soft/mpich-master
  • HDF5 installiert in /home/robl/soft/hdf5-1.8.16
    • zB konfiguriert wie ../../hdf5-1.8.16/configure --prefix=/home/robl/work/soft/hdf5-1.8.16 CC=/home/robl/work/soft/mpich/bin/mpicc --enable-parallel
  • NetCDF4 in /home/robl/soft/netcdf-master installiert
    • z.B. konfiguriert wie ./configure CC=${HOME}/work/soft/mpich/bin/mpicc --prefix=${HOME}/work/soft/netcdf-master CPPFLAGS=-I${HOME}/work/soft/hdf5-1.8.16/include LDFLAGS=-L${HOME}/work/soft/hdf5-1.8.16/lib

jetzt haben Sie alle Pre-requisietes für netcdf-Python

durch die Art und Weise, http://unidata.github.io/netcdf4-python/ die Voraussetzungen auslegt und die notwendigen Konfigurationsoptionen

nicht Versteh aufgehängt auf dem carping über hdf5.pc. Wenn Sie nc-config in Ihrem Pfad haben, liefert es die benötigten Informationen.

Wenn Sie für die parallele Programmierung bauen, setzen Sie CC auf Ihren MPI-Compiler. Wenn nicht, können Sie den Schritt "export CC = ..." überspringen: