2016-09-19 2 views
0

Wir haben eine Anwendung, die einen Teil ihrer Arbeit in Python in einem virtuellen Python-Environment-Setup mit virtualenv erledigt.Welche Beziehung besteht zwischen einer virtuellen Python-Umgebung und bestimmten Systembibliotheken?

Wir haben ein Problem festgestellt, bei dem die Version einer Systembibliothek nicht mit der in der virtuellen Umgebung installierten Version übereinstimmt. Das heißt, wir haben NetCDF4 in der virtuellen Umgebung installiert und zuvor libnetcdf.so.7 über yum installiert. Das Python-Paket scheint davon abhängig zu sein, dass libnetcdf.so.7 verfügbar ist.

Aufgrund eines Systemupdates ist libnetcdf.so.7 nicht mehr vorhanden und wurde durch libnetcdf.so.11 ersetzt.

Die Frage ist also: Ermittelt die Einrichtung der virtuellen Umgebung die Systembibliothek Version oder gibt es einen anderen Mechanismus? Müssen wir die Umgebung neu erstellen, um dies zu beheben, oder gibt es eine andere Option?

Antwort

0

Wenn Sie virtualenv verwenden, um eine virtuelle Umgebung zu erstellen, haben Sie die Option, die Standard-Site-Pakete als Teil der Umgebung hinzuzufügen. Da dies nun Standardverhalten ist (obwohl es in der Befehlszeile mit --no-site-packages geltend gemacht werden kann), ist es möglich, dass Sie eine ältere Version von virtualenv verwenden, die nicht darauf besteht.

In diesem Fall sollten Sie in der Lage sein, die Umgebung relativ einfach neu zu erstellen. Zunächst einmal fangen die aktuell installierten Pakete in der bestehenden Umgebung mit dem commmand

pip freeze > /tmp/requirements.txt 

Dann die virtuellen Umgebung löschen und neu erstellen Sie es mit den folgenden Befehlen:

virtualenv --no-site-packages envname 
source envname/bin/activate 
pip install -r /tmp/requirements.txt 

jedoch nichts davon behebt das heikle Problem, dass die erforderlichen Support-Bibliotheken nicht installiert sind. Sie könnten versuchen, aus der Position der alten Bibliothek eine symbolische Verknüpfung zur neuen Bibliothek zu erstellen - es kann sein, dass NetCDF4 mit mehreren Versionen von libnetCDF arbeiten kann und einfach so konfiguriert ist, dass eine bestimmte Version verwendet wird. Wenn nicht, dann könnte die Lösung dieses Problems lange und schmerzhaft sein.

Verwandte Themen