Programmering

PyOxidizer bruger Rust til at lave Python-eksekverbare filer

Et nyt projekt, skrevet i Rust, har til formål at gøre det lettere at pakke og distribuere en Python-applikation som en selvstændig binær eksekverbar version - noget der længe har været et smertepunkt for Python-udviklere.

PyOxidizer er ifølge GitHub README "en samling af rustkasser, der letter bygningsbiblioteker og binære filer, der indeholder Python-tolke." Med PyOxidizer hævder dets udviklere, at det er muligt at oprette en eksekverbar fil til en Python-app, der integrerer en Python-tolk uden andre runtime-afhængigheder.

PyOxidizer kræver installation af Rust 1.31 eller bedre og pakker kun apps skrevet med Python 3.7. For at bruge PyOxidizer opretter udvikleren en TOML-fil, der beskriver, hvordan man integrerer en given Python-app, derefter bygger og kører PyOxidizer med en miljøvariabel, der peger på den TOML-fil.

PyOxidizer adskiller sig fra andre emballageløsninger ved at bruge en brugerdefineret build af Python-tolken, der er designet til at være statisk knyttet og indlejret i et andet program. Andre løsninger, som PyInstaller, distribuerer den eksisterende lager CPython .DLL - praktisk og kompatibel, men ikke særlig fleksibel. PyOxidizer pakker også bytecode til Python-appen i det eksekverbare billede og indlæser det direkte fra hukommelsen (hurtigt) snarere end fra filsystemet (langsommere).

Ligesom PyInstaller udfører PyOxidizer dog ikke nogen optimeringer på Python-koden. Et andet projekt, Nuitka, kompilerer ikke kun Python-apps til enkeltstående eksekverbare filer, men prøver også at anvende ydeevneoptimeringer på den kompilerede kode. Nuitka betragtes imidlertid stadig som et projekt på beta-niveau, og mange af de forventede forbedringer af ydeevnen er endnu ikke tilgængelige.

PyOxidizer selv er stadig et meget tidligt projekt. Det kan kun generere Linux-binære filer, fordi et af de opstrøms-projekter, det afhænger af, den integrerede version af CPython, er i øjeblikket kun tilgængelig i Linux-builds.

$config[zx-auto] not found$config[zx-overlay] not found