Tworzenie pojedynczego pliku wykonywalnego z projektu Pythona

Chcę utworzyć pojedynczy plik wykonywalny z mojego projektu Pythona. Użytkownik powinien być w stanie pobrać i uruchomić go bez konieczności zainstalowania Pythona. Gdybym tylko dystrybuował pakiet, mógłbym użyć pip, wheel i PyPI do zbudowania go i dystrybucji, ale wymaga to, aby użytkownik miał Pythona i wiedział, jak zainstalować pakiety. Czego mogę użyć do zbudowania samodzielnego pliku wykonywalnego z projektu Pythona?

Author: davidism, 2012-08-21

2 answers

Oto kilka typowych. O ile nie zaznaczono wyraźnie, wszystkie projekty wymienione poniżej są aktywnie utrzymywane od mojej ostatniej edycji (sierpień 2018).

Umieściłem również linki do ich stron internetowych, ofert repo i PyPi na wypadek, gdybyś chciał sam sprawdzić, jak często były one aktualizowane.

Ponadto, o ile nie zaznaczono inaczej, wszystkie programy wymienione poniżej będą produkować exe specjalnie dla systemu operacyjnego, w którym jest uruchomiony. Więc na przykład, uruchamianie Pyinstaller w Windows będzie produkować exe Windows, ale uruchomienie Pyinstaller w Linuksie będzie produkować Exe Linux. Jeśli chcesz stworzyć exe dla wielu systemów operacyjnych, musisz przyjrzeć się używaniu maszyn wirtualnych lub użyć czegoś w rodzaju Wine .


Wszystkie poniższe programy działają podobnie - łączą Pythona i twój program, skutecznie łącząc je w celu wytworzenia wykonywalny.

  • PyInstaller:

    • Linki: Strona WWW || Repo || PyPi
    • obsługuje : Python 2.7 i Python 3.4 - 3.7 w systemach Windows, Mac i Linux.
  • Cx_Freeze:

    • Linki: Strona WWW || Repo || PyPi
    • obsługuje: Python 2.7 i 3.5 - 3.7 (?) na Windows, Mac i Linux.
  • Pyapp:

    • Linki: Strona WWW || Repo || PyPi
    • obsługuje: Python 2.7 i 3.3 (?) - 3.7 (?) tylko na Macu.
    • Uwaga: od ostatniej edycji nie byłem w stanie jednoznacznie określić dokładnego zakresu wersji Pythona obsługiwanych przez pyapp. Najnowsze wydanie wspomina o obsłudze Pythona 3.7.

Uwaga: przed wersje tego postu zawierały wpisy dla py2exe (repo ) i bbfreeze (repo ). Oba projekty zostały usunięte z tej listy: od kilku lat obserwują niewiele aktywności i wydają się być całkowicie niezabezpieczone. Zobacz historię edycji dla starych writeup.


Oczywiście, to nie jedyny sposób na robienie rzeczy:

  • Pynsist:

    • Linki: Strona Www || Repo || PyPi
    • obsługuje: Wszystkie wersje Pythona? Uwaga -- tworzy tylko instalatory Windows.
    • Inne uwagi: Pynsist wydaje się wspierać łączenie dowolnej wersji Pythona z Twoją aplikacją. Jednak samo narzędzie wymaga Pythona 3.5+ do uruchomienia.

      Pynsist utworzy Instalator Windows dla Twojego programu, który zainstaluje Pythona bezpośrednio na komputerze użytkownika, zamiast łączyć go z Twój kod i utwórz skróty, które łączą się ze skryptem Pythona. Mimo, że program ten produkuje tylko instalatory Windows, wydaje się, że można {127]}nadal uruchomić Pynsist na komputerach Mac i Linux.

  • Nuitka:

    • linki: Strona WWW || Repo (Github mirror) || PyPi
    • obsługuje: Python 2.6 - 2.7 i Python 3.3-3.7 w systemach Windows, Mac i Linux.
    • inne uwagi: Nuitka dosłownie skompiluje Twój kod Pythona i stworzy exe (w przeciwieństwie do innych projektów, które po prostu zawierają Pythona), aby spróbować przyspieszyć twój kod. Jako efekt uboczny otrzymasz również poręczny exe, który możesz rozpowszechniać. Zauważ, że musisz mieć kompilator C++ dostępny w Twoim systemie.
  • Cython:

    • Linki: Strona WWW || Repo || PyPi
    • obsługuje: Python 2.6 - 2.7 i Python 3.2-3.7 (?) na Windows, Mac i Linux.
    • Cython jest podobny do Nuitki, ponieważ jest kompilatorem Pythona. Jednak, zamiast bezpośrednio kompilować kod, skompiluje go do C. Możesz następnie wziąć ten kod C i przekształcić swój kod w exe . Musisz mieć kompilator C dostępny w Twoim systemie.

Moje osobiste preferencje to używanie PyInstaller ponieważ było to najłatwiejsze dla mnie, aby dostać się i działa, został zaprojektowany do pracy ładnie z różnymi popularnymi bibliotekami, takimi jak numpy lub pygame, i ma wielką kompatybilność z różnymi wersjami OSes i Python.

Jednak z powodzeniem zbudowałem różne EXY używając cx_Freeze bez większych trudności, więc powinieneś również rozważyć ten program.

Jeszcze nie miałem okazji spróbować pynist, Nuitka, czy Cython, ale wydają się całkiem ciekawe i innowacyjnych rozwiązań. Jeśli napotkasz problemy z użyciem pierwszej grupy programów, warto wypróbować jeden z tych trzech programów. Ponieważ działają one zasadniczo inaczej niż programy w stylu Pyinstaller / cx_freeze, mogą odnieść sukces w tych dziwnych przypadkach, gdy pierwsza grupa zawiedzie.

W szczególności uważam, że pynist jest dobrym sposobem na uniknięcie całej kwestii dystrybucji kodu: Mac i Linux mają już natywne wsparcie dla Pythona, a dopiero instalacja Python w systemie Windows może być najczystszym rozwiązaniem. (Minusem jest to, że teraz musisz się martwić o kierowanie na wiele wersji Pythona + instalowanie bibliotek).

Nuitka i Cython (z mojego ograniczonego doświadczenia) wydają się działać dość dobrze. Ponownie, sam nie testowałem ich intensywnie, więc moją główną obserwacją jest to, że wydaje się, że produkowanie exe trwa znacznie dłużej niż programy w stylu "zamrożenia".

Na koniec, jeśli chcesz wspierać tylko Linuksa, możesz chcesz przyjrzeć się tworzeniu pakietu distro dla Twojego pakietu, zamiast przekształcać go w plik wykonywalny. Lista narzędzi, które mogą ci w tym pomóc, wykracza poza zakres tego postu, ale oto niektóre materiały do czytania , jeśli zdecydujesz się zbadać tę trasę.

 79
Author: Michael0x2a,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-11 04:03:36

Pyinstaller jest nadal aktywnie rozwijany. Możesz zobaczyć najnowsze zmiany na Githubie.

Posiada wsparcie dla wszystkich trzech głównych platform:

  • Windows (32-bit i 64-bit)
  • Linux (32-bit i 64-bit)
  • Mac OS X (32-bit i 64-bit)

I obsługuje wersje Pythona 2.6 i 2.7. Nie obsługuje Pythona 3, ale istnieje eksperymentalna gałąź Pythona 3 .

Update

Od wersji 3.2.1 it obsługa Pythona 2.7, 3.3-3.5

 9
Author: jterrace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-07 00:55:16