De ce am forțat nixpkgs | R-BLOGGERS

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

Iată de ce

Deoarece furculițele pot fi uneori un pic controversate, am decis că o postare pe blog este în ordine.

În primul rând, să clarificăm ceva: asta nu înseamnă că nu mai contribuim la amonte, dimpotrivă. Dar Nix este în primul rând managerul de pachete al unei distribuții Linux, Nixos și, ca atare, modul în care anumite lucruri au sens doar în acel context. Pentru nevoile noastre, a avea o furculiță ne oferă mai multă flexibilitate. Lasă -mă să explic.

Deși este posibil din punct de vedere tehnic pentru NIX să furnizeze multe versiuni ale aceluiași pachet (de exemplu, puteți instala cele mai recente EMAC -uri instalând emacs pachet sau Emacs 28 prin instalarea emacs28) Acest lucru depinde în cele din urmă de faptul că întreținătorul dorește să facă acest lucru sau dacă este practic. După cum vă puteți imagina, cu mai mult de 20 000 de pachete CRAN și Bioconductor, acest lucru nu este posibil pentru noi (prin „noi”, mă refer la întreținătorii ecosistemului R pentru NIX). Deci, pentru un dat nixpkgs angajează, nu vei putea uşor instalați o versiune specifică a {dplyr} care nu este inclus în acel particular nixpkgs angajează. În schimb, îl puteți instala de la sursă, iar acest lucru este posibil cu {rix} Scriind ceva de genul:

Dar, deoarece acest lucru încearcă să instaleze pachetul de la sursă, acesta poate eșua dacă acel pachet are nevoie de corecții specifice NIX pentru a funcționa.

De asemenea, nu este practic să actualizăm întregul pachete R setat pe NIX în fiecare zi: așa că, în timp ce Cran și Bioconductor primesc zilnic actualizări, pachetele R setate pe Nix se actualizează doar în jurul noilor versiuni ale lui R. Din nou, acesta este un lucru din nou Consecința Nix este în primul rând managerul pachetului unei distribuții Linux cu propria guvernare și modul de a face lucrurile.

Aici este locul rstats-on-nix furculiță de nixpkgs Este interesant: pentru că este o furculiță, ne putem permite să facem lucrurile într -un mod care nu ar putea fi posibil sau practic pentru amonte.

Primul lucru pe care această furculiță ne permite să îl facem este să oferim o imagine zilnică a CRAN. În fiecare zi, datorită acțiunilor Github, setul de pachete R se actualizează, iar rezultatul comitează unei sucursale datate. Acest lucru se întâmplă de la 14 decembrie 2024 (vezi aici). Deci, când stabiliți o dată ca în rix(date = "2024-12-14", ...) Aceasta este furculița care se va obișnui. Dar acest lucru nu înseamnă că vă recomandăm să utilizați orice dată de la rstats-on-nix/nixpkgs Fork: În schimb, în ​​fiecare luni, o altă acțiune folosește această furculiță și încearcă să construiască un set de pachete populare pe Linux și macOS și numai dacă acest lucru reușește este data adăugată printr -un PR la lista datelor disponibile la {rix}!

Motivul pentru care se face acest lucru este să gestionezi altul risc din amonte nixpkgs. După cum știți, nixpkgs este uriaș și, deși cea mai mare grijă este acordată de contribuabili, iar procesul de revizuire a PR este foarte strict, se poate întâmpla ca actualizarea pachetelor să spargă alte pachete. De exemplu, recent, Rstudio a fost într -o stare ruptă din cauza unei probleme într -una boost. Aceasta nu este vina în special a nimănui: este doar faptul că pachetele se actualizează și pachetele care depind de ele ar trebui să se actualizeze, dar dacă acest lucru nu se întâmplă suficient de repede, nixpkgs Întreținerea se confruntă cu o conundru. Fie el sau ea nu actualizează pachetul, deoarece îi rupe pe alții, dar nu actualizarea unui pachet ar putea fi o vulnerabilitate de securitate, sau actualizează pachetul, dar acum altele, poate că pachetele mai puțin critice sunt rupte și trebuie să fie rezolvate, fie de dezvoltatorii lor din amonte, fie de către nixpkgs întreținerea pachetelor menționate. În cazul RStudio, a fost propusă o soluție și fuzionată prompt, dar dacă doriți să instalați Rstudio în timpul necesar pentru a o repara, v -ați fi confruntat cu un mesaj de eroare, ceea ce nu este excelent dacă tot ce doriți este să folosiți cochilii nix ca medii de dezvoltare.

Așadar, pentru noi, faptul că o furculiță ne permite să retragem aceste corecții și, astfel, dacă încercați să instalați RStudio folosind cea mai recentă dată disponibilă, care este "2025-02-10"va funcționa, în timp ce dacă încercați să o construiți la această dată folosind în amonte nixpkgs Te -ai confrunta cu o eroare!

Am petrecut destul de mult timp remedierea remedierii: ne -am întors până în 2019. Modul în care funcționează, este că începem să verificăm un nixpkgs Angajați la datele selectate, apoi „actualizăm” pachetele R setate prin utilizarea instantaneelor ​​pozitive CRAN și Bioconductor zilnic. Apoi, ne retragem cât mai multe corecții și ne asigurăm că o selecție de pachete populare funcționează atât pe X86-Linux (care include Windows, prin WSL), cât și pe Aarch64-Darwin (seria M de Macs). Apoi ne angajăm totul la o ramură datată a rstats-on-nix/nixpkgs furculiţă. Puteți consulta toate datele disponibile rulând: rix::available_dates(). Suntem destul de confindați că nu ar trebui să vă confruntați cu probleme atunci când utilizați NIX pentru a construi medii reproductibile pentru R. Cu toate acestea, dacă ar trebui să vă confruntați cu o problemă, nu ezitați să deschideți o problemă!

Avem acum pachete și versiuni R care lucrează la Linux și macOS din martie 2019 până acum. Vedeți acest depozit care conține scripturile care ne -au permis să o facem. Remediile de retragere a fost deosebit de importantă pentru calculatoarele de siliciu Apple, deoarece a durat ceva timp pentru ca această platformă să funcționeze corect pe NIX. Prin retragerea corecțiilor, acum putem oferi versiuni vechi ale acestor pachete și pentru siliconul de mere!

Folosind această abordare, furculița noastră conține acum mai multe versiuni de pachete R de lucru decât în ​​amonte. {rix} Astfel, probabil că va continua să ne îndreptăm spre furculița noastră în viitor și nu va mai fi în amonte. Acest lucru ar trebui să ofere o experiență de utilizator mult mai bună. Cu toate acestea, o problemă cu furculița noastră este aceea că, prin remedierea remedierii, creăm în esență noi pachete NIX care nu sunt incluse în amonte și, prin urmare, acestea nu sunt construite de platforma CI Hydra, Nix, care construiește pachete binare. În practică, aceasta înseamnă că oricine folosește furculița va trebui să compileze multe pachete de la sursă. Acum acest lucru este destul de rău, deoarece construirea de pachete de la sursă durează destul de mult timp. Dar nu te teme, pentru că datorită lui Cachix avem acum și un cache binar dedicat de pachete care completează cache -ul public, public NIX! Oferim instrucțiuni despre cum să folosiți Cachix, este foarte ușor, doar rulează 2 comenzi suplimentare după instalarea NIX. Utilizarea Cachix accelerează enorm procesul de instalare a pachetelor. Vreau să -mi mulțumesc din inimă lui Domen Kožar pentru sponsorizarea cache -ului!

Un alt lucru pe care îl facem cu furculița noastră este să conducă o acțiune în fiecare zi la miezul nopții, care monitorizează sănătate a pachetelor R setate. Desigur, nu construim fiecare pachet Cran, doar o mână, dar acestea sunt printre cele mai populare sau cele mai multe la risc de a fi într -o stare ruptă. Vezi aici.

De asemenea, există o nouă versiune RIX pe Cran

{rix} Acum se ocupă de pachetele de la distanță care au dependențe la distanță (ele însele cu dependențe la distanță) mult mai bine datorită codului de Michael Heming.

De asemenea, am petrecut destul de mult timp {rix} Lucrați mai bine cu IDES și au documentat și asta într -o nouă vinie. Diferența cu versiunile anterioare de {rix}este că acum când un utilizator furnizează un nume IDE ide argument al rix() Funcția, acel IDE va ​​fi instalat de NIX, care anterior nu a fost cazul. Acest lucru afectează cu adevărat doar codul, ca și înainte, setarea ide = "code" ar adăuga doar {languageserver} Pachet de server pe lista pachetelor R de instalat. Asta era confuz, pentru că dacă ide = "rstudio"atunci Rstudio va fi instalat. Așa că am decis că dacă ide = "some editor"atunci acel editor ar trebui instalat de NIX. Vignetta legată mai sus explică în detaliu modul în care puteți configura editorul dvs. pentru a lucra cu cochilii NIX.

Dacă decideți să dați {rix} Încercați, vă rugăm să ne anunțați cum merge!

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.