Dystrybucja aplikacji z zależnościami

Dystrybucja aplikacji z zależnościami
YA
  • Rejestracja:prawie 10 lat
  • Ostatnio:3 dni
  • Postów:2370
0

W świecie Javy i mavena tworzę sobie odpowiednią konfigurację projektu i mogę jedną komendą wygenerować paczkę wraz z zależnościami (*.jar)

Czy w świecie Pythona jest coś takiego co pozwala utworzyć dystrybucję aplikacji wraz z zależnymi modułami?

Najczęściej moduły, które przychodzi mi stworzyć uruchamiane są na maszynach bez dostępu do internetu i z praktycznie gołym systemem. Każde doinstalowanie czegokolwiek, to ścieżka bólu i cierpienia. Chciałbym tego uniknąć i stąd ten temat. Jak to się robi w pythonie i czy się tak robi?

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:4 minuty
  • Postów:4927
2

CD
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 2 lata
  • Postów:20
1
YA
Ciekawa opcja, aczkolwiek wygląda, że dla XAR SquashFS jest wymaganą zależnością, co wymaga założenia, że albo będzie dostępny na gołym systemie, albo ktoś to doinstaluje (a taki scenariusz, że ktoś coś ma doinstalować, chcę wyeliminować).
siloam
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:99
1

W Pythonie służą do tego takie moduły jak Py2exe i PyInstaller. Tworzą one środowisko z interpreterem Pythona, zależnościami i Twoim kodem w jednym folderze. Cały proces jest zautomatyzowany. Taka pythonowa wersja instalacyjna programu zajmuje więc znacznie więcej miejsca niż jedna binarka w Javie czy C++, bo to de facto całe środowisko uruchomieniowe. Więcej tutaj: https://docs.python-guide.org/shipping/freezing/


edytowany 2x, ostatnio: siloam
superdurszlak
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:Kraków
  • Postów:2000
1
siloam napisał(a):

W Pythonie służą do tego takie moduły jak Py2exe i PyInstaller. Tworzą one środowisko z interpreterem Pythona, zależnościami i Twoim kodem w jednym folderze. Cały proces jest zautomatyzowany. Taka pythonowa wersja instalacyjna programu zajmuje więc znacznie więcej miejsca niż jedna binarka w Javie czy C++, bo to de facto całe środowisko uruchomieniowe. Więcej tutaj: https://docs.python-guide.org/shipping/freezing/

Nuitka kompiluje Pythona do C i później C do rzeczywistej binarki, a nie bundla z doczepionym interpreterem Pythona. Teoretycznie plik wynikowy powinien być trochę lżejszy, w praktyce wsysa tyle rzeczy po drodze (chyba cały stdlib Pythona), że binarka dla stosunkowo prostego skryptu okazała się 3 razy większa niż taki bundle :o No i nie wspiera (choć ktoś chyba próbował to wprowadzić) cross-kompilacji, więc chcąc wyprodukować binarkę na ARM musisz kompilować na docelowej platformie, VM lub emulatorze co jest trochę słabe.


edytowany 1x, ostatnio: superdurszlak
siloam
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:99
0

Szczerze mówiąc pierwszy raz słyszę o kompilacji Pythona do C. Kiedyś ludzie z Dropbox'a napisali jedną z wersji klienta i użyli Py2exe, więc to narzędzie ma na pewno status production ready. https://www.usenix.org/system/files/conference/woot13/woot13-kholia.pdf, choć uważam, że bardziej przyjazny jest PyInstaller. Python to język typowo skryptowy, więc tworzenie chudych binarek jest dość kłopotliwe. Jeżeli komuś na tym zależy to lepiej pisać od razu w Nim, który świetnie kompiluje się do C i tworzy zoptymalizowane binarki a jego skladnia jest bardzo podobna do składni Pythona (no może oprócz modelu obiektowego, który bazuje na domieszkach, a nie klasach).


edytowany 2x, ostatnio: siloam
Pyxis
  • Rejestracja:ponad 7 lat
  • Ostatnio:34 minuty
0
yarel napisał(a):

Każde doinstalowanie czegokolwiek, to ścieżka bólu i cierpienia. Chciałbym tego uniknąć i stąd ten temat.

Możesz też dorzucić z automatu do paczki skrypt, który korzysta z napisanych przez Ciebie modułów: https://docs.python.org/3/distutils/setupscript.html#installing-scripts

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.