(Acest articol a fost publicat pentru prima dată pe R | Dr. Tom Palmerși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
Introducere
În postările anterioare am acoperit crearea de documente cu cvarto cu mai multe motoare și, de asemenea, cum să folosesc medii virtuale UV pentru nbstata Jupyter Kernel pentru a rula documente de quarto cu cod Stata. Prin urmare, prin extindere banală, putem folosi uv Pentru a gestiona mediile virutale pentru rularea documentelor de quarto folosind jupyter: python3 motor.
Ușorul inconvenient cu privire la această abordare atunci când lucrați la un proiect de colaborare cu noi utilizatori Python este faptul că ajungeți să lăsați un script Readme sau Shell cu comenzile necesare pentru a activa mediul, instalați kernelul NBSTATA și rulați quarto. Simt că acest management al mediului virutal este un punct de durere pentru noii utilizatori Python – care se întreabă probabil ce este pe pământ un mediu virtual. Așa că am căutat o modalitate de a simplifica acest proces pentru ei.
O postare recentă de Matt Dray despre utilizarea UV pentru a rula scripturi Python executabile de sine stătătoare m-a gândit. Aș putea produce un script Python executabil de sine stătător similar pentru a efectua redarea pentru documentele de cvarto folosind motorul Jupyter. Apoi, colegii mei ar trebui să apeleze la scriptul ca executabil la linia de comandă. Acest lucru le -ar evita problemele de a gestiona mediul virtual.
Scriptul python executabil de sine stătător
Am venit cu următorul script Python.
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.9"
# dependencies = (
# "jupyterlab>=4.4.3",
# "jupyterlab-stata-highlight2>=0.1.2",
# "nbstata>=0.8.3",
# )
# ///
import subprocess
cmd0 = "python -m nbstata.install --sys-prefix"
retval0 = subprocess.call(cmd0, shell=True)
print('returned value:', retval0)
cmd1 = "quarto render --profile stata-questions"
retval1 = subprocess.call(cmd1, shell=True)
print('returned value:', retval1)
cmd2 = "quarto render --profile stata-solutions"
retval2 = subprocess.call(cmd2, shell=True)
print('returned value:', retval2)
-
Prima linie, Shebang se asigură că este condus de
uv run -
Metadatele care definesc mediul Python este declarată între
# /// script # ... # ///
- Dacă nu utilizați Stata, spuneți că utilizați
jupyter: python3motor, apoi puteți ștergejupyterlab-stata-highlight2şinbstataintrări și primul grup de 3 linii pentrucmd0. - Dacă utilizați pachete Python suplimentare în codul dvs., atunci trebuie să le adăugați la listă.
- Dacă nu utilizați Stata, spuneți că utilizați
-
Apoi vine codul propriu -zis. Acestea sunt pur și simplu apeluri de sistem folosind subproces modul. Puteți modifica numărul de apeluri și apelurile în sine în cadrul cotațiilor șirului, după cum este necesar. Recreat câteva dintre comenzile de redare din postarea mea recentă despre utilizarea profilurilor de quarto pentru documentele tutoriale. Merită să subliniem că nu am folosit pachetul Python Quarto aici, deoarece în prezent este ușor prea limitat pentru utilizarea mea (nu sunt sigur că poate face profiluri).
Salvați scriptul într -un fișier, să zicem faceapoi face -l executabil cu
chmod +x render
Atunci toți colegii mei trebuie să facă este să -l ruleze cu
./render
Desigur, UV și Quarto trebuie să fie instalate și să fie pe acestea PATHiar Stata trebuie instalată local atunci când utilizați acest lucru. Pentru colegii mei care folosesc Windows, trebuie să ruleze acest lucru de la un shell Git Bash, mai degrabă decât de la PowerShell sau CMD Shell (pentru ca linia Shebang să funcționeze).
Dacă utilizați doar motorul Quarto Knitr, atunci nu aveți nevoie de acest script, deoarece nu aveți nevoie de Jupyter.
Și pentru mai multe informații despre scripturile UV Python, documentația completă este aici.
Rezumat
Am arătat cum să fac un script Python executabil de sine stătător pentru a reda documente quarto folosind motorul Jupyter care își gestionează automat propriul mediu virtual. Aceasta înseamnă că utilizatorii nu trebuie să gestioneze în sine mediul virtual, ceea ce poate fi un punct de durere pentru noii utilizatori Python.
