Dezvoltare de pachete Python pentru dezvoltatorii R (episodul 2!)

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

(Acest articol a fost publicat pentru prima dată pe Blogul lui Yohannși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)


Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.

Într-un articol anterior, am împărtășit experiența mea ca dezvoltator R care se scufundă în dezvoltarea de pachete Python!

Observasem câteva aspecte care se simțeau mai puțin netede decât în ​​R, sau chiar lipsesc complet!

Datorită feedback-ului din partea comunității, am reușit să identific câteva instrumente care pot ajuta la abordarea frustrărilor pe care le-am întâlnit inițial!

Am arătat că încărcarea automată a modulelor a fost puțin mai complicată în Python decât în ​​R. În timp ce aceasta a funcționat bine în modul de dezvoltare cu uv pip install -e .mi s-a părut mai greoi când lucram în notebook-uri (în special Quarto).

A reproduce pkgload::load_all() comportament, am explorat două opțiuni: autoreload în Quarto și Marimo.

Quarto

Adăugarea unei anumite porțiuni de cod la începutul notebook-ului m-a ajutat să rezolv problema!

%load_ext autoreload
%autoreload 2

Această opțiune reîncarcă automat modulele Python importate atunci când le modificați codul sursă. Aceasta este o mică diferență în comparație cu pkgload::load_all() în R, care reîncarcă toate modulele din mediul curent.

Parametrul 2 înseamnă că toate modulele importate vor fi reîncărcate automat, cu excepția celor din pachetele de sistem.

Pentru mai multe informații, puteți verifica documentația oficială IPython.

Marimo

Aceasta a fost marea descoperire în urma articolului meu! 😍

Marimo este un cadru Python pentru construirea de notebook-uri interactive și reproductibile și se simte surprinzător de ușor de utilizat. Se simte un pic ca un amestec între Quarto și Shiny în lumea R. Ca și Shiny, este reactiv: atunci când schimbi o intrare sau o variabilă, tot ce depinde de ea se actualizează automat. Și, ca și Quarto, este conceput pentru a combina codul, textul și elementele vizuale într-un singur document care poate fi partajat. Rezultatul este un mediu curat, autonom, în care puteți explora date, puteți crea aplicații mici sau puteți publica rapoarte interactive, totul fără a părăsi Python.

Rezultatul este frumos, iar experiența de dezvoltare este cu adevărat plăcută!

Cel mai important, revenind la problema mea inițială, reîncarcă automat modulele importate atunci când le modifici codul sursă!

Pentru a afla mai multe, documentația este disponibilă aici.

Pentru gestionarea reîncărcării automate, există un parametru de activat în opțiunile lui Marimo – consultați documentația dedicată aici.

Pentru a-l instala cu uvpur și simplu rulați:

uv add "marimo(recommended)"

Memento rapid: uv add adaugă pachetul la dependențele tale (în pyproject.toml) și îl instalează automat.

Și apoi pentru a crea/editați un blocnotes, rulați:

uv run marimo edit path_to_your_notebook.py

Și asta este!


quartodoc vă permite să generați documentație ca un site web, la fel ca {pkgdown} în R.

quartodoc extrage documente pentru a genera fișiere .qmd sau .md, pe care Quarto le poate reda apoi ca site-uri de documentare statică.

Nu am explorat instrumentul în detaliu – pare a fi mai multă muncă decât ce {pkgdown} necesită în R (ceea ce, să recunoaștem, ne face viața mult mai ușoară), dar rezultatul este sincer impresionant și poate arăta exact ca {pkgdown}.

Documentația oferă un tutorial video destul de cuprinzător.


Mi-a fost greu să găsesc un instrument care să mă permită să verific calitatea codului și a documentației mele. devtools::check() uneori ne face să ne smulgem părul, dar este chiar la îndemână!

În cele din urmă, mi s-au sugerat două instrumente: pre-commit și ruff.

pre-angajare

pre-commit gestionează cârlige care execută automat verificări înainte de fiecare comitere, ajutându-vă să impuneți formatarea consecventă și calitatea codului. Este foarte util pentru a evita erorile de formatare, problemele de documentare etc.

Pentru a-l instala cu uvpur și simplu rulați:

uv add pre-commit

Urmând exemplul minim din pagina de documentație, am reușit să creez un .pre-commit-config.yaml fișier care verifică calitatea codului meu și a documentației la fiecare comitere.

De asemenea, puteți declanșa manual aceste verificări (un pic ca devtools::check() în R) cu:

uv run pre-commit run --all-files

ruf

ruff acționează atât ca linter, cât și ca formatator, similar modului în care lintr și styler (sau Air) se completează reciproc în R.

Pentru mai multe informații, consultați documentația ruff.

Ca de obicei, instalare cu UV:

uv add ruff

Apoi, sunt disponibile două comenzi:

uv run ruff format .

şi

uv run ruff check .

Prima comandă formatează codul, a doua verifică calitatea codului, care completează pre-commit (de asemenea, puteți configura pre-commit a alerga ruff automat la fiecare comitere prin adăugarea unui cârlig în dvs .pre-commit-config.yaml fişier).


Concluzie

Datorită ajutorului comunității, am reușit să identific instrumente care abordează frustrările pe care le-am întâlnit inițial!

În esență, am reușit să găsesc toate caracteristicile pe care le apreciez în R în Python! Descoperirea mea preferată este Marimo, care îmi permite să dezvolt caiete interactive într-un mod foarte simplu și eficient!

Singurul dezavantaj rămas este {pkgdown} echivalent: deși poate produce site-uri frumoase, se simte puțin mai puțin automatizat decât omologul său R.

Principalele concluzii ale acestui articol

  • extensia IPython %autoreload și Marimo rezolvă problemele de reîncărcare a modulelor

  • quartodoc poate servi ca a {pkgdown}-cum ar fi instrument de documentare

  • pre-commit şi ruff înlocui devtools::check() pentru evaluarea calitatii

Comparație: instrumente de dezvoltare a pachetelor R vs Python

Managementul mediului și al dependenței {renv} uv, poetry, pip, venv
Crearea pachetului usethis::create_package() uv init --lib
Încărcați/reîncărcați în timpul dezvoltării pkgload::load_all() %autoreloadMarimo
Documentare roxygen2, {pkgdown} documente, quartodoc
Testarea unitară testthat pytest
Calitatea codului și verificări devtools::check() pre-commit, ruff
Site / site de documentare {pkgdown} quartodoc + Quarto

Sursele pachetelor sunt disponibile aici (cu exemple de caiete).

Din nou, nu ezita să subliniezi erorile pe care le-am făcut poate sau să mă ghidezi asupra lucrurilor cu care am avut mai multe dificultăți!

Vă mulțumesc tuturor, în special lui Joseph Barbier, James Azam, Uriah Finkel, Antoine Languillaume pentru că mi-ați oferit feedback cu privire la primul articol pe această temă!

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.