PyOxidizer gebruikt Rust om Python-uitvoerbare bestanden te maken

Een nieuw project, geschreven in Rust, heeft tot doel het gemakkelijker te maken om een ​​Python-applicatie te verpakken en te distribueren als een op zichzelf staand binair uitvoerbaar bestand - iets dat lange tijd een pijnpunt is geweest voor Python-ontwikkelaars.

PyOxidizer is volgens GitHub README "een verzameling Rust-kratten die het bouwen van bibliotheken en binaire bestanden met Python-interpreters vergemakkelijken." Met PyOxidizer, zo beweren de ontwikkelaars, is het mogelijk om een ​​uitvoerbaar bestand te bouwen voor een Python-app die een Python-interpreter insluit, zonder andere runtime-afhankelijkheden.

PyOxidizer vereist een installatie van Rust 1.31 of hoger, en pakketten alleen apps die zijn geschreven met Python 3.7. Om PyOxidizer te gebruiken, maakt de ontwikkelaar een TOML-bestand dat beschrijft hoe een bepaalde Python-app moet worden ingesloten, en bouwt en voert vervolgens PyOxidizer uit met een omgevingsvariabele die naar dat TOML-bestand verwijst.

PyOxidizer onderscheidt zich van andere verpakkingsoplossingen door een aangepaste build van de Python-interpreter te gebruiken die is ontworpen om statisch te worden gekoppeld en in een ander programma te worden ingebed. Andere oplossingen, zoals PyInstaller, herverdelen de bestaande voorraad CPython .DLL — handig en compatibel, maar niet erg flexibel. PyOxidizer pakt ook de bytecode voor de Python-app in de uitvoerbare afbeelding in en laadt deze rechtstreeks uit het geheugen (snel), in plaats van uit het bestandssysteem (langzamer).

Net als PyInstaller voert PyOxidizer echter geen optimalisaties uit op de Python-code. Een ander project, Nuitka, compileert niet alleen Python-apps naar zelfstandige uitvoerbare bestanden, maar probeert ook prestatie-optimalisaties toe te passen op de gecompileerde code. Nuitka wordt echter nog steeds beschouwd als een project op bètaniveau en een groot aantal van de verwachte prestatieverbeteringen zijn nog niet beschikbaar.

PyOxidizer zelf is nog een zeer pril project. Het kan alleen Linux-binaire bestanden genereren omdat een van de upstream-projecten waarvan het afhankelijk is, de insluitbare versie van CPython, momenteel alleen beschikbaar is in Linux-builds.