Jak mogę zrobić skrypt Pythona samodzielnym wykonywalnym do uruchomienia bez żadnych zależności?

Buduję aplikację Pythona i nie chcę zmuszać klientów do instalowania Pythona i modułów.

Czy istnieje sposób na skompilowanie skryptu Pythona jako samodzielnego pliku wykonywalnego?

Author: Peter Mortensen, 2011-03-28

19 answers

Możesz użyć py2exe jako już odpowiedzi i użyć Cython {[8] } do konwersji plików klucza .py w .pyc, skompilowanych plikach C, takich jak .dll W Windows i .so w Linuksie.

Jest to znacznie trudniejsze do odwrócenia niż zwykłe .pyo i .pyc pliki (a także zysk w wydajności!).

 268
Author: neurino,
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
2020-06-22 15:44:15

Możesz użyć PyInstaller do pakowania programów Pythona jako samodzielnych plików wykonywalnych. Działa na systemach Windows, Linux i Mac.

PyInstaller Quickstart

Zainstaluj PyInstaller z PyPI:

pip install pyinstaller

Przejdź do katalogu programu i uruchom:

pyinstaller yourprogram.py

Spowoduje to wygenerowanie pakietu w podkatalogu o nazwie dist.

Aby uzyskać bardziej szczegółowe informacje, zobacz Podręcznik .

 361
Author: Rumple Stiltskin,
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-02-27 19:09:04

Możesz chcieć zbadać Nuitka . Pobiera kod źródłowy Pythona i konwertuje go do wywołań C++ API. Następnie kompiluje się do pliku binarnego wykonywalnego (ELF na Linuksie). Istnieje już od kilku lat i obsługuje szeroką gamę wersji Pythona.

Prawdopodobnie otrzymasz również poprawę wydajności, jeśli go użyjesz. Jest to zalecane.

 93
Author: cdarke,
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
2020-07-28 17:37:56

Chciałbym skompilować kilka przydatnych informacji na temat tworzenia samodzielnych plików w systemie Windows przy użyciu Pythona 2.7.

Użyłem py2exe i działa, ale miałem pewne problemy.

Ten ostatni powód sprawił, że próbowałem PyInstaller http://www.pyinstaller.org/.

Moim zdaniem jest o wiele lepiej bo:

    Jest łatwiejszy w użyciu.

I zaproponuj stworzenie .plik bat z następującymi liniami na przykład (pyinstaller.exe musi być w ścieżce Windows):

pyinstaller.exe --onefile MyCode.py

Myślę więc, że przynajmniej dla Pythona 2.7 lepszą i prostszą opcją jest PyInstaller.

 33
Author: Diego,
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
2020-07-28 17:46:27

Tak, możliwe jest kompilowanie skryptów Pythona do samodzielnych plików wykonywalnych.

PyInstaller może być używany do konwersji programów Pythona na samodzielne pliki wykonywalne, Pod Windows, Linux, Mac OS X, FreeBSD, Solaris i AIX. Jest to jeden z zalecanych konwerterów.

Py2exe konwertuje Skrypty Pythona na wykonywalne tylko na platformie Windows.

Cython jest statycznym kompilatorem dla obu język programowania Python i rozszerzony język programowania Cython.

 31
Author: fury.slay,
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
2020-07-28 17:56:09

A trzecią opcją jest cx_Freeze, który jest wieloplatformowy.

 27
Author: Katriel,
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
2020-12-24 01:56:33

Lubię PyInstaller - szczególnie wariant "windowed":

pyinstaller --onefile --windowed myscript.py

Utworzy jeden pojedynczy *.plik exe w folderze distinction/.

 17
Author: cslotty,
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
2020-07-28 18:04:28

Możesz polubić py2exe . Znajdziesz tam również informacje na temat robienia tego na Linuksie.

 17
Author: user237419,
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
2020-11-16 16:33:21
pyinstaller yourfile.py -F --onefile

Tworzy to samodzielny plik EXE w systemie Windows.

Ważna uwaga 1: plik EXE zostanie wygenerowany w folderze o nazwie 'dist'.

Ważna uwaga 2: nie zapomnij --onefile flag

Możesz zainstalować PyInstaller używając pip install PyInstaller

Tutaj wpisz opis obrazka

Tutaj wpisz opis obrazka

Uwaga: w rzadkich przypadkach są ukryte dependencies...so jeśli uruchomisz plik EXE i pojawi się błąd brakującej biblioteki (win32timezone w przykładzie poniżej) następnie użyj czegoś takiego:

pyinstaller --hiddenimport win32timezone -F "Backup Program.py"
 16
Author: Chadee Fouad,
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
2020-07-28 18:07:06

Użyj py2exe.... użyj poniższych plików konfiguracyjnych:

from distutils.core import setup
import py2exe

from distutils.filelist import findall
import matplotlib

setup(
    console = ['PlotMemInfo.py'],

    options = {
        'py2exe': {
            'packages': ['matplotlib'],
            'dll_excludes': ['libgdk-win32-2.0-0.dll',
                             'libgobject-2.0-0.dll',
            'libgdk_pixbuf-2.0-0.dll']
        }
    },
    data_files = matplotlib.get_py2exe_datafiles()
)
 14
Author: Anand,
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
2020-07-28 17:39:42

Polecam również PyInstaller dla lepszej kompatybilności wstecznej, takiej jak Python 2.3 - 2.7.

Dla py2exe , musisz mieć Pythona 2.6.

 13
Author: yantaq,
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
2020-06-22 15:52:26

Dla skryptów Pythona 3.2 jedynym wyborem jest cx_Freeze . Zbuduj go ze źródeł; w przeciwnym razie nie zadziała.

Dla Pythona 2.x proponuję PyInstaller, ponieważ może spakować program Pythona w jednym pliku wykonywalnym, w przeciwieństwie do cx_Freeze, który wysyła również biblioteki.

 9
Author: ravi.chunduru,
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
2020-06-22 15:50:53

Py2exe utworzy plik EXE, który chcesz, ale musisz mieć tę samą wersję MSVCR90.dll na komputerze masz zamiar użyć nowego pliku EXE.

Zobacz Tutorial Więcej informacji.

 6
Author: Belial,
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
2020-07-28 17:41:06

Listę narzędzi dystrybucyjnych znajdziesz na Narzędzia dystrybucyjne.

Używam bbfreeze i działa bardzo dobrze(jeszcze nie ma wsparcia dla Pythona 3).

 6
Author: Joe,
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
2020-07-28 17:44:43

Nie do końca jest to opakowanie kodu Pythona, ale teraz jest też Grumpy od Google, które przenosi kod do Go .

Nie obsługuje API Pythona C, więc może nie działać dla wszystkich projektów.

 4
Author: freeformz,
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
2020-07-28 17:48:36

Używając PyInstaller , znalazłem lepszą metodę używając skrótu do .exe zamiast robić --onefile. W każdym razie prawdopodobnie istnieją pewne pliki danych, a jeśli używasz aplikacji opartej na witrynie, Twój program zależy również od plików HTML, JavaScript i CSS. Nie ma sensu przenosić tych wszystkich plików gdzieś... A co jeśli przesuniemy ścieżkę roboczą w górę?

Wykonaj skrót do pliku EXE, przesuń go u góry i ustaw ścieżki docelowe i startowe zgodnie z podanymi, aby miały ścieżki względne do dist \ folder :

Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe
Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\"

Możemy zmienić nazwę skrótu na cokolwiek, więc zmiana nazwy na "GTFS-Manager". Teraz, kiedy dwukrotnie klikam Skrót, to tak, jakbym python-uruchomił plik! Uznałem to podejście za lepsze niż --onefile jako:

  1. W przypadku onefile jest problem zbrak dll dla systemu operacyjnego Windows 7, który wymaga wcześniejszej instalacji itp. Ziew. Przy zwykłej kompilacji z wieloma plikami nie ma takich problemów.
  2. wszystkie pliki, które Moje Skrypt w Pythonie wykorzystuje (Jest to implementacja serwera www tornado i potrzebuje całej cholernej strony internetowej wartej plików, aby tam być!) nie trzeba nigdzie przenosić: po prostu tworzę skrót na górze.
  3. mogę użyć tego samego folderu na Ubuntu (Uruchom python3 myfile.py) i Windows (kliknij dwukrotnie SKRÓT).
  4. Nie muszę się przejmować zbyt skomplikowanym hakowaniem .plik spec do dołączania plików danych itp.

Oh, pamiętaj, aby usunąć folder build po budynek. Pozwoli to zaoszczędzić na rozmiarze.

 4
Author: Nikhil VJ,
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
2020-07-28 18:03:27

Użyj Cython , Aby przekonwertować do C, skompilować i połączyć z GCC.

Innym może być, zrobić podstawowe funkcje w C (te, które chcesz zrobić trudne do odwrócenia), skompilować je i użyć Boost.Python do zaimportowania skompilowanego kodu (dodatkowo otrzymujesz znacznie szybsze wykonanie kodu). Następnie użyj dowolnego narzędzia wymienionego do dystrybucji.

 3
Author: F.Moure,
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
2020-07-28 17:54:52

Ponieważ wydaje się, że brakuje go na aktualnej liście odpowiedzi, myślę, że warto wspomnieć, że biblioteka Standardowa zawiera zipapp moduł, który można wykorzystać do tego celu. Jego podstawowym zastosowaniem jest kompresja kilku plików Pythona do pliku zip z rozszerzeniem .pyz, który może być bezpośrednio wykonywany jako python myapp.pyz, ale można również utworzyć samodzielny pakiet z pliku requirements.txt:

$ python -m pip install -r requirements.txt --target myapp
$ python -m zipapp -p "interpreter" myapp

Gdzie interpreter może być czymś w rodzaju /usr/bin/env python (patrz określanie Interpreter ).

Zazwyczaj generowane .pyz / .pyzw plik powinien być wykonywalny, w Unixie, ponieważ jest oznaczany jako taki, a w Windows, ponieważ instalacja Pythona Zwykle rejestruje te rozszerzenia. Jednak stosunkowo łatwo jest utworzyć plik wykonywalny systemu Windows, który powinien działać tak długo, jak długo użytkownik ma python3.dll w ścieżce.

Jeśli nie chcesz wymagać od użytkownika końcowego instalacji Pythona, możesz rozpowszechnić aplikację wraz z osadzalnym Pythonem pakiet .

 2
Author: jdehesa,
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
2020-08-24 16:11:16

Powiedziano mi, że PyRun jest również opcją. Obecnie obsługuje Linux, FreeBSD i Mac OS X.

 1
Author: Kraig Brockschmidt - MSFT,
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
2020-11-16 19:25:11