Agent-almanac manage-renv-dependencies
git clone https://github.com/pjt222/agent-almanac
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/de/skills/manage-renv-dependencies" ~/.claude/skills/pjt222-agent-almanac-manage-renv-dependencies-8f1048 && rm -rf "$T"
i18n/de/skills/manage-renv-dependencies/SKILL.mdrenv-Abhaengigkeiten verwalten
Reproduzierbare R-Paketumgebungen mit renv einrichten und pflegen.
Wann verwenden
- Initialisierung der Abhaengigkeitsverwaltung fuer ein neues R-Projekt
- Hinzufuegen oder Aktualisieren von Paketabhaengigkeiten
- Wiederherstellen einer Projektumgebung auf einem neuen Rechner
- Fehlersuche bei renv-Wiederherstellungsfehlern
- Integration von renv mit CI/CD-Pipelines
Eingaben
- Erforderlich: R-Projektverzeichnis
- Optional: Vorhandene
-Datei (fuer Wiederherstellung)renv.lock - Optional: GitHub PAT fuer private Pakete
Vorgehensweise
Schritt 1: renv initialisieren
renv::init()
Dies erstellt:
-Verzeichnis (Bibliothek, Einstellungen, Aktivierungsskript)renv/
(Abhaengigkeits-Snapshot)renv.lock- Aktualisiert
um renv beim Laden zu aktivieren.Rprofile
Erwartet: Projektlokale Bibliothek erstellt.
renv/-Verzeichnis und renv.lock vorhanden. .Rprofile mit Aktivierungsskript aktualisiert.
Bei Fehler: Wenn es haengt, die Netzwerkverbindung pruefen. Wenn es bei einem bestimmten Paket fehlschlaegt, dieses Paket zuerst manuell mit
install.packages() installieren und dann renv::init() erneut ausfuehren.
Schritt 2: Abhaengigkeiten hinzufuegen
Pakete wie gewohnt installieren:
install.packages("dplyr") renv::install("github-user/private-pkg")
Dann einen Snapshot erstellen um den Zustand festzuhalten:
renv::snapshot()
Erwartet:
renv.lock mit neuen Paketen und deren Versionen aktualisiert. renv::status() zeigt keine nicht-synchronisierten Pakete.
Bei Fehler: Wenn
renv::snapshot() Validierungsfehler meldet, renv::dependencies() ausfuehren um zu pruefen welche Pakete tatsaechlich verwendet werden, dann renv::snapshot(force = TRUE) um die Validierung zu umgehen.
Schritt 3: Auf einem anderen Rechner wiederherstellen
renv::restore()
Erwartet: Alle Pakete in den exakten Versionen aus
renv.lock installiert.
Bei Fehler: Haeufige Probleme: GitHub-Pakete schlagen fehl (
GITHUB_PAT in .Renviron setzen), Systemabhaengigkeiten fehlen (unter Linux mit apt-get installieren), Timeouts bei grossen Paketen (options(timeout = 600) vor der Wiederherstellung setzen) oder Binaerpakete nicht verfuegbar (renv kompiliert aus Quellcode; sicherstellen dass Build-Werkzeuge installiert sind).
Schritt 4: Abhaengigkeiten aktualisieren
# Ein bestimmtes Paket aktualisieren renv::update("dplyr") # Alle Pakete aktualisieren renv::update() # Snapshot nach Aktualisierungen renv::snapshot()
Erwartet: Zielpakete auf ihre neuesten kompatiblen Versionen aktualisiert.
renv.lock spiegelt nach dem Snapshot die neuen Versionen wider.
Bei Fehler: Wenn
renv::update() fuer ein bestimmtes Paket fehlschlaegt, es direkt mit renv::install("package@version") installieren und dann einen Snapshot erstellen.
Schritt 5: Status pruefen
renv::status()
Erwartet: "No issues found" oder eine klare Liste nicht-synchronisierter Pakete mit umsetzbaren Hinweisen.
Bei Fehler: Wenn der Status Pakete meldet die verwendet aber nicht erfasst sind,
renv::snapshot() ausfuehren. Wenn Pakete erfasst aber nicht installiert sind, renv::restore() ausfuehren.
Schritt 6: .Rprofile
fuer bedingte Aktivierung konfigurieren
.Rprofileif (file.exists("renv/activate.R")) { source("renv/activate.R") }
Dies stellt sicher dass das Projekt auch funktioniert wenn renv nicht installiert ist (CI-Umgebungen, Mitarbeiter).
Erwartet: R-Sitzungen aktivieren renv automatisch beim Start im Projektverzeichnis. Sitzungen ohne installiertes renv starten weiterhin fehlerfrei.
Bei Fehler: Wenn
.Rprofile Fehler verursacht, sicherstellen dass die file.exists()-Pruefung vorhanden ist. Nie source("renv/activate.R") bedingungslos aufrufen.
Schritt 7: Git-Konfiguration
Diese Dateien versionieren:
renv.lock # Immer committen renv/activate.R # Immer committen renv/settings.json # Immer committen .Rprofile # Committen (enthaelt renv-Aktivierung)
Diese ignorieren (bereits in renvs
.gitignore):
renv/library/ # Maschinenspezifisch renv/staging/ # Temporaer renv/cache/ # Maschinenspezifischer Cache
Erwartet:
renv.lock, renv/activate.R und renv/settings.json werden von Git versioniert. Maschinenspezifische Verzeichnisse (renv/library/, renv/cache/) werden ignoriert.
Bei Fehler: Wenn
renv/library/ versehentlich committet wurde, mit git rm -r --cached renv/library/ entfernen und zu .gitignore hinzufuegen.
Schritt 8: CI/CD-Integration
In GitHub Actions die renv-Cache-Action verwenden:
- uses: r-lib/actions/setup-renv@v2
Dies stellt automatisch aus
renv.lock mit Caching wieder her.
Erwartet: CI-Pipeline stellt Pakete aus
renv.lock mit aktiviertem Caching wieder her. Nachfolgende Durchlaeufe sind durch gecachte Pakete schneller.
Bei Fehler: Wenn die CI-Wiederherstellung fehlschlaegt, pruefen dass
renv.lock committet und aktuell ist. Fuer private GitHub-Pakete sicherstellen dass GITHUB_PAT als Repository-Secret gesetzt ist.
Validierung
-
meldet keine Problemerenv::status() -
ist in die Versionskontrolle committetrenv.lock -
funktioniert bei einem sauberen Checkoutrenv::restore() -
aktiviert renv bedingt.Rprofile - CI/CD verwendet
fuer die Abhaengigkeitsaufloesungrenv.lock
Haeufige Stolperfallen
im falschen Verzeichnis ausfuehren: Immer zuerstrenv::init()
verifizierengetwd()- renv und Systembibliothek mischen: Nach
nur die Projektbibliothek verwendenrenv::init() - Snapshot vergessen: Nach der Installation von Paketen immer
ausfuehrenrenv::snapshot()
-Flag:--vanilla
ueberspringtRscript --vanilla
, sodass renv nicht aktiviert wird.Rprofile- Grosse Lock-Dateien in Diffs: Normal --
ist als diffbares JSON konzipiertrenv.lock - Bioconductor-Pakete:
verwenden und sicherstellen dass BiocManager konfiguriert istrenv::install("bioc::PackageName")
Verwandte Skills
-- beinhaltet renv-Initialisierungcreate-r-package
-- CI-Integration mit renvsetup-github-actions-ci
-- Abhaengigkeitsverwaltung fuer CRAN-Paketesubmit-to-cran