Nieuwe standaard in Python brengt oplossing voor complexe lock-bestanden

Nieuwe standaard in Python brengt oplossing voor complexe lock-bestanden

Het officiële Python-team stelde PEP 751 vast. Hierin specificeert men de afhankelijkheden van pakketten voor een applicatie. Daarmee zijn installaties reproduceerbaar zonder dat gebruikers de afhankelijkheden tijdens de installatie opnieuw hoeven te bepalen.

Python-coreontwikkelaar Paul Moore verklaarde desgevraagd aan DevClass dat sprake is van een volledige, definitieve goedkeuring en dus geen voorlopige. Hij hoopte zo vertraging te voorkomen voordat gebruikers de nieuwe standaard kunnen impementeren. Dat gezegd hebbende, zullen niet alle bestaande package managers hun eigen lock-bestandsformaten laten vallen, hoewel er wel enige ondersteuning komt. De nieuwe standaard gebruikt TOML. Dat is een format dat programmeertalen breed ondersteunen.

Python-applicaties zijn afhankelijk van modules, zogenaamde packages, die worden gebruikt via een importsysteem. Om ervoor te zorgen dat een applicatie-installatie reproduceerbaar is, moeten telkens dezelfde versies van die packages worden gebruikt. Voordelen hiervan zijn onder andere betrouwbaarheid en verbeterde veiligheid. Lock-bestanden maken dit mogelijk door de afhankelijkheden en versies van pakketten vast te leggen.

Minder complexiteit voor hostingproviders

Het probleem dat in PEP 665 werd geschetst, was dat er geen standaard Python-lockbestand bestond. In plaats daarvan gebruikten meerdere tools zoals PDM, Poetry, pip-tools en Pipenv elk hun eigen formaat, wat leidde tot complexiteit voor tools en hostingproviders.  

PEP 665 werd begin 2022 afgewezen, omdat de community volgens core-ontwikkelaar Paul Moore naar eigen zeggen nog beter wilde begrijpen wat de bedoeling was. Een belangrijk knelpunt was namelijk het verschil tussen een Python wheel (een binair pakket) en een sdist (source distribution), die gebruikt wordt wanneer er geen wheel beschikbaar is. Bij gebruik van een sdist is reproduceerbaarheid moeilijker te garanderen. PEP 665 bood helemaal geen ondersteuning voor sdists, waardoor het team achter Poetry aangaf het niet te kunnen ondersteunen.

In juli 2024 stelde Cannon PEP 751 voor, waarin expliciet rekening wordt gehouden met sdists, met een optie voor gebruikers om het gebruik ervan in of uit te schakelen. Een herziening van PEP 751 in januari 2025 werd breed besproken, waarbij de community zocht naar een oplossing die ook kon worden geaccepteerd door tools zoals Poetry, PDM en uv. Dat laatste is een package manager geschreven in Rust.

Gemengde reacties

De reacties op de specificatie zijn gemengd. Volgens Cannon gaven toolontwikkelaars aan dat ze de PEP kunnen en willen implementeren als exportformaat. Dit betekent echter niet dat ze het ook als hun enige lock-bestandsformaat zullen aannemen. De maker van uv, Charlie Marsh, zei dat de pylock.toml-bestanden in de stijl van PEP 751 op dit moment niet voldoende zijn om uv.lock te vervangen, maar dat er wel ondersteuning komt voor export.

Standaardisatie is lastig wanneer er al concurrerende standaarden in brede kring worden gebruikt. De Python-community is overtuigd van de waarde van een officiële standaard, maar het punt bereiken waarop alle packaging-tools deze intern gebruiken, zal een uitdaging zijn en vermoedelijk verdere herzieningen vereisen.