Wie man defekte Abhängigkeiten von R-Paketen nach einem libgfortran.so-Update repariert

582
Cbhihe

[In der Praxis sollte dies für alle Lx-Distributionen gelten, und "konzeptionell" auch für alle Apple- und M $ -Betriebssysteme.]

Aktualisieren von R [base] auf Ihrem System kann manchmal einige Abhängigkeiten brechen, in Abhängigkeit von den Paketen, die Sie installiert haben und die Nutzung durch den Aufruf: library("package_name"). Dies ist mir kürzlich nach einem routinemäßigen Release-Update passiert. Hier ist die Nachricht, die ich bekam:

Freigegebenes Objekt kann nicht geladen werden /home/USER/R/x86_64-pc-linux-gnu-library/3.5/leaps/libs/leaps.so:
libgfortran.so.4 : Freigegebene Objektdatei kann nicht geöffnet werden: Keine solche Datei oder Verzeichnis

package_dep_install_error

Ich habe einige Beiträge zu SE, Github und anderen Ländern mit ähnlichen Berichten, aber ohne Lösung (zumindest für mich) gesehen.

  • Durch das erneute Installieren der R-Base können Sie etwas Gutes oder Schlechtes tun.
  • Ein weiterer Aspekt, der mir einfällt, ist das Herabstufen und Entfernen der neuesten Pakete, um zu einem früheren Versionsstand zurückzukehren. Für Roll-Releases wie Arch Lx nicht zufriedenstellend und kompliziert zu warten.

Wie kann man das also um 19:00 Uhr beheben, wenn man R jetzt "jetzt" zum Laufen bringen muss?

0

1 Antwort auf die Frage

0
Cbhihe

1) $ find /usr/lib/ -name "libgfortran.*" Überzeugen Sie sich davon, dass es einfach libgfortran.so.4 -> libgfortran.so.5.0.0nicht hilft, den fehlenden symbolischen Link zusammenzustellen .
(Die Versionsinfo von Target "5.0.0" im symbolischen Link hängt von den installierten Versionen ab.)

2) Finden Sie heraus , welche Abhängigkeiten gebrochen sind. Dies ist eine Funktion Ihrer installierten Pakete. (Ersetzen Sie den /3.xPfad unter der von R baseIhnen verwendeten Version .)

$ ldd ~/R/x86_64-pc-linux-gnu-library/3.x/*/libs/*.so \ | egrep '(so:$|not found)' > ~/R/x86_64-pc-linux-gnu-library/3.x/foobar 

lddgibt Abhängigkeiten von Shared Objects aus. Jede Zeile foobarvor einer Zeile, in der "nicht gefunden" angezeigt wird, bezieht sich auf ein defektes Paket, das entfernt und erneut installiert werden muss.

3) Verschieben Sie die Ordner der zuvor identifizierten beschädigten Pakete in einen Sicherungsordner Ihrer Wahl. Yr R-Pakete werden normalerweise ~/R/x86_64-pc-linux-gnu-library/3.x/standardmäßig in lx installiert . (Jeder andere Speicherort muss von Ihnen während der Installation oder global in Ihrer R-Konfigurationsdatei angegeben werden.) Installieren Sie entfernte Pakete von der R-Konsole aus neu:
> install.packages(c("pkg_name_1","pkg_name_2",...), depend=T)
Beachten Sie, dass nicht (removing | moving)vorhandene (defekte) Pakete von ihrem Speicherort entfernt werden und durch die Neuinstallation der Pakete nichts behoben wird . Sie müssen die Ordner der defekten Pakete von ihrem Speicherort verschieben, sodass R Abhängigkeiten neu erstellen kann.

4) Laden Sie interessierende Bibliotheken und führen Sie Ad-hoc-Tests von der R-Konsole aus, bevor Sie sie entfernen ~/R/x86_64-pc-linux-gnu-library/3.x/foobar.

HTH.