PyOxidizer używa Rusta do tworzenia plików wykonywalnych Pythona

Nowy projekt, napisany w Rust, ma na celu ułatwienie pakowania i dystrybucji aplikacji Pythona jako samodzielnego binarnego pliku wykonywalnego - coś, co od dawna stanowiło problem dla programistów Pythona.

PyOxidizer, zgodnie z jego plikiem README GitHub, to „zbiór skrzynek Rusta, które ułatwiają budowanie bibliotek i plików binarnych zawierających interpretery Pythona”. Z PyOxidizer, jak twierdzą jego programiści, możliwe jest zbudowanie pliku wykonywalnego dla aplikacji Python, która osadza interpreter Pythona, bez innych zależności środowiska wykonawczego.

PyOxidizer wymaga instalacji Rust 1.31 lub nowszej i pakuje tylko aplikacje napisane w Pythonie 3.7. Aby użyć PyOxidizer, programista tworzy plik TOML, który opisuje, jak osadzić daną aplikację w języku Python, a następnie buduje i uruchamia PyOxidizer ze zmienną środowiskową wskazującą na ten plik TOML.

PyOxidizer wyróżnia się na tle innych rozwiązań w zakresie pakowania, ponieważ używa niestandardowej kompilacji interpretera języka Python, który jest przeznaczony do statycznego łączenia i osadzania w innym programie. Inne rozwiązania, takie jak PyInstaller, redystrybuują istniejący CPython .DLL - wygodny i kompatybilny, ale niezbyt elastyczny. PyOxidizer pakuje również kod bajtowy aplikacji Python do obrazu wykonywalnego i ładuje go bezpośrednio z pamięci (szybko), a nie z systemu plików (wolniej).

Jednak, podobnie jak PyInstaller, PyOxidizer nie wykonuje żadnych optymalizacji kodu Pythona. Inny projekt, Nuitka, nie tylko kompiluje aplikacje Pythona do samodzielnych plików wykonywalnych, ale także próbuje zastosować optymalizacje wydajności do skompilowanego kodu. Jednak Nuitka jest nadal uważana za projekt na poziomie beta, a wiele z przewidywanych ulepszeń wydajności nie jest jeszcze dostępnych.

Sam PyOxidizer jest nadal projektem na bardzo wczesnym etapie. Może generować tylko pliki binarne Linuksa, ponieważ jeden z projektów nadrzędnych, od których zależy, osadzalna wersja CPythona, jest obecnie dostępna tylko w kompilacjach Linuksa.