PyOxidizer usa Rust per creare eseguibili Python

Un nuovo progetto, scritto in Rust, mira a rendere più semplice il pacchetto e la distribuzione di un'applicazione Python come eseguibile binario autonomo, cosa che è stata a lungo un punto dolente per gli sviluppatori Python.

PyOxidizer, secondo il suo README di GitHub, è "una raccolta di casse Rust che facilitano la creazione di librerie e binari contenenti interpreti Python". Con PyOxidizer, affermano i suoi sviluppatori, è possibile creare un eseguibile per un'app Python che incorpora un interprete Python, senza altre dipendenze di runtime.

PyOxidizer richiede un'installazione di Rust 1.31 o superiore e crea pacchetti solo di app scritte con Python 3.7. Per utilizzare PyOxidizer, lo sviluppatore crea un file TOML che descrive come incorporare una determinata app Python, quindi crea ed esegue PyOxidizer con una variabile di ambiente che punta a quel file TOML.

PyOxidizer si distingue dalle altre soluzioni di packaging nell'utilizzo di una build personalizzata dell'interprete Python progettato per essere collegato staticamente e incorporato in un altro programma. Altre soluzioni, come PyInstaller, ridistribuiscono lo stock esistente CPython .DLL — conveniente e compatibile, ma non molto flessibile. PyOxidizer impacchetta anche il bytecode per l'app Python nell'immagine eseguibile e lo carica direttamente dalla memoria (veloce), piuttosto che dal file system (più lento).

Come PyInstaller, tuttavia, PyOxidizer non esegue alcuna ottimizzazione sul codice Python. Un altro progetto, Nuitka, non solo compila app Python in eseguibili standalone, ma cerca anche di applicare ottimizzazioni delle prestazioni al codice compilato. Tuttavia, Nuitka è ancora considerato un progetto di livello beta e molti dei miglioramenti delle prestazioni previsti non sono ancora disponibili.

PyOxidizer stesso è ancora un progetto in una fase iniziale. Può generare solo binari Linux perché uno dei progetti upstream da cui dipende, la versione incorporabile di CPython, è attualmente disponibile solo nelle build Linux.