Dacă ai putea pune Piton sau R cod într-o pagină HTML, faceți dublu clic pe fișier și îl rulați? Niciun server, nici un pas de construire, nicio instalare și nimic trimis nicăieri: totul rulează în browser.
Asta este pyr.js face. L-am construit săptămâna aceasta cu Claude (asistentul AI al Anthropic), care a scris codul și testele din deciziile mele de proiectare și a verificat totul într-un browser fără cap. Ridicarea grele este realizată de Pyodide (Python compilat în WebAssembly) și webR (același lucru pentru R). pyr.js este lipiciul: un singur fișier, aproximativ 460 de linii pe care le poți citi efectiv, care găsește codul Python și R în pagina ta și îl conectează la HTML.
Un prim exemplu
Salvați acest lucru ca un .html fișier și deschideți-l în browser:
count = 0
py-click rulează Python când se face clic pe butonul și py-out spune unde duce rezultatul. Orice eveniment DOM funcționează în același mod (py-input, py-change…), iar pentru R, este r-click, r-inputși așa mai departe. Ieșirea tipărită și diagramele lui R apar direct în pagină:
Aici, .value (_value în Python) păstrează valoarea curentă a glisorului, iar histograma este redesenată pe măsură ce o deplasați.
Python și R calculează, desenează JavaScript
Partea mea preferată: rezultatele pot fi transmise ca date la orice bibliotecă de diagrame JavaScript. Într-o postare anterioară, am folosit Observable Plot și Highcharts pentru tablouri de bord. Cu pyr.js, py-then / r-then transferați rezultatul unei funcții la alegere. Un cadru de date R vine ca o matrice de rânduri, gata de reprezentat:
Același lucru funcționează și cu Python: listele de dict, matrice numpy și panda DataFrames sunt convertite pentru dvs. Iată exemplul Observable Plot din depozit, cu o mers aleatorie Python (redesenată printr-un glisor) și cadrul de date R de mai sus:

Cât de repede este?
Prima vizită descarcă motoarele (câțiva MB pentru Python, apoi memorate în cache de browser), iar pornirea Python durează aproximativ 3 secunde. Nimic magic până acum.
Partea interesantă: când pyr.js este găzduit pe același site cu paginile dvs., Python rulează într-un muncitor comun. Alte file ale site-ului, și chiar reîncărcările paginilor, reutilizați interpretul care rulează deja: în testele mele (Chromium), pagina era gata în sub 0,1 secunde în loc de 3. Fiecare filă are în continuare propriile variabile, iar o reîncărcare încă începe pagina proaspătă. Pentru R, webR nu permite acest lucru (încă), așa că începe cu fiecare pagină.
Există și o editare live modul de dezvoltare: puneți codul dvs. Python într-un .py fisier, adauga data-watch la eticheta de script, iar modificările dvs. se aplică paginii care rulează de îndată ce salvați, fără reîncărcare.
Confidențialitate
pyr.js nu trimite nimic nicăieri. Fără analize, fără telemetrie: codul și datele tale rămân în browserul vizitatorului. Singurele solicitări de rețea sunt pentru motoarele în sine și pachetele pe care codul dvs. le importă.
Încearcă
