Python un uv
Šis ieraksts ir tehnisks. Tas var būt par datoriem, programmēšanu, lodēšanu un tamlīdzīgām ne pārāk populārām lietām. Ja tevi šāds saturs neinteresē, droši vari to nelasīt.
Laiku pa laikam sanāk atgriezties pie Python. Ne tā, ka ikdienā, bet pāris reizes gadā. Iepriekšējā iterācijā es piespiedu sevi apgūt venv. Pamatā tāpēc, ka vajadzēja reproducējamas piegādes uz vietām, kur ir ļoti dažādas pitona versijas.
Šī gada pitona jaunums man ir modernais un spīdīgais tā pakotņu pārvaldības rīks uv
. Jā, kad par to pirmo reizi izdzirdēju, bija tieši tas viedoklis — kārtējais rastistu jociņš ar better because written in Rust. Pie kam, nosaukums, kā jau tanī pasaulē pieņemts, ir absolūti nesameklējams. Pagājušogad, kad garām skrienot uzmetu aci anonsam, loģiski izsecināju, ka tas noteikti ilgi nedzīvos. Labi, ka tā nenotika.
Pat, ja dari pitonu reti, iesaku uzmest aci. Patīkami, implementē visus, šķiet, nepieciešamos PEP un iespēju klāsts ir negaidīti brangs.
Neticamā kārtā tas tiktiešām ir labākais, kas ir noticis pitona pakotņu pārvaldībā kopš pip
parādīšanās. Bet ne par to šodien stāsts. Vakar uzzināju, ka tam eksistē iespēja norādīt atkarības pašā pitona skriptā. Neizskatās eleganti, bet doma skaista. Tāds implicit go mod tidy
.
# /// script
# requires-python = ">=3.12"
# dependencies = [
# "requests",
# ]
# [tool.uv]
# exclude-newer = "2023-10-16T00:00:00Z"
# ///
OK, tas izskatās pēc jauna DSL (kas patiesībā ir TOML), bet ja paskatās uz problēmu, kuru tas viss risina, šis upuris ir nieks.
26. februārī, plkst. 21:35
Iespēja scriptā norādīt tā atkarības patiesībā ir standartizēta:
... bet
uv
, protams, ir malači, ka ir to ātri ieviesuši.Bija interesanti paklausīties arī Talk Python podcastu par
uv
: https://talkpython.fm/episodes/show/476/unified-python-packaging-with-uv26. februārī, plkst. 21:37
Jā, es pēc šī ieraksta publicēšanas arī atklāju, ka
uv
ir PEP atbilstošs.30. aprīlī, plkst. 10:02
Es fanoju par Emacs, bet priekš Python neko labāku neesmu redzējis par PyCarm. venv menedžē pats PyCharm redaktors, katram projektam var uztaisīt savu (tiek piedāvāts jau pie projekta izveides). Piemēram, pievienot pakotnes var projekta iestatījumos: File->Settings->Project:->Python Interpreter vai arī no PyCharm komandrindas ar pip.
Vēl PyCharm interesanta fiška ir, ka ja esi aizmirsis pievienot kādu importu vai tas ir nepareizs, tad jamais piedāvā variantus kādu importu un no kurienes jāpievieno. Īpaši ērti tas ir tad, kad mākslīgais intelekts piedāvā koda gabalu, bet ar dažiem importiem, kuri ir jaunākajās pitona bibliotēkās mainījušies. Piemēram (PySide6): ja QPrinter ir nepareizi norādīts zem PySide6.GtGui, tad tur to importu izdzēšam un tikko tiek kodā rakstīts QPriter, tad viņš parāda, kurš imports (vai vairāki no dažādām bibliotēkām ir jāizvēlas viens no tiem) ir jāpievieno un piedāvā to automātiski pievienot. QPrinter piemērs: from PySide6.QtGui import QPageSize, QTextDocument from PySide6.QtPrintSupport import QPrinter