Buduję aplikację Python i nie chcę zmuszać moich klientów do instalowania Pythona i modułów.
Czy jest więc sposób na skompilowanie skryptu Python, aby był samodzielnym plikiem wykonywalnym?
Buduję aplikację Python i nie chcę zmuszać moich klientów do instalowania Pythona i modułów.
Czy jest więc sposób na skompilowanie skryptu Python, aby był samodzielnym plikiem wykonywalnym?
Odpowiedzi:
Możesz użyć py2exe jako już odebranego i użyć cytonu do konwersji .py
plików kluczy, plików .pyc
skompilowanych w języku C, takich jak .dll
w systemie Windows i .so
Linux, znacznie trudniej przywrócić pliki zwykłe .pyo
i .pyc
pliki (a także zwiększyć wydajność!)
Za pomocą PyInstaller można spakować programy w języku Python jako samodzielne pliki wykonywalne. Działa w systemach Windows, Linux i Mac.
Szybki start PyInstaller
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
.Bardziej szczegółowy przewodnik znajduje się w instrukcji .
Możesz zbadać Nuitkę . Pobiera kod źródłowy Pythona i konwertuje go na wywołania API C ++. Następnie kompiluje się w wykonywalny plik binarny (ELF w systemie Linux). Istnieje już od kilku lat i obsługuje szeroką gamę wersji Pythona.
Prawdopodobnie uzyskasz także poprawę wydajności, jeśli go użyjesz. Zalecana.
Chciałbym skompilować przydatne informacje na temat tworzenia samodzielnych plików w systemie Windows za pomocą Pythona 2.7.
Użyłem py2exe i działa, ale miałem pewne problemy.
Pokazał pewne problemy z tworzeniem pojedynczych plików w systemie Windows w 64-bitowych bitach: Używanie plików bundle_files = 1 z py2exe nie działa ;
Aby to działało, konieczne jest utworzenie pliku setup.py. http://www.py2exe.org/index.cgi/Tutorial#Step2 ;
Mam problemy z zależnościami, które musisz rozwiązać, importując pakiety do pliku instalacyjnego;
Nie udało mi się sprawić, by działał razem z PyQt ..
Ten ostatni powód skłonił mnie do wypróbowania PyInstaller http://www.pyinstaller.org/ .
Moim zdaniem jest znacznie lepiej, ponieważ:
Sugeruję na przykład utworzenie pliku .bat z następującymi wierszami (pyinstaller.exe musi znajdować się w ścieżce Windows):
pyinstaller.exe --onefile MyCode.py
Możesz utworzyć pojedynczy plik, wśród innych opcji ( https://pyinstaller.readthedocs.io/en/stable/usage.html#options ).
Miałem tylko jeden problem z PyInstallerem i pakietem wieloprocesowym, który został rozwiązany przy użyciu tego przepisu: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing .
Myślę więc, że przynajmniej dla Pythona 2.7 lepszą i prostszą opcją jest PyInstaller.
--onefile
Flaga nie pomoże Ci zrobić to przenośny na Windows, ponieważ nadal wykonywalny chce połączenia z api-ms-win-crt-runtime-l1-1-0.dll
biblioteki (lub / i innych), które muszą być zainstalowane przez vcredist
pakiet. Tak więc zależność nadal istnieje i musi zostać zainstalowana przed uruchomieniem.
Tak, możliwe jest skompilowanie skryptów Python w samodzielny plik wykonywalny.
PyInstaller może służyć do konwertowania programów Python na samodzielne pliki wykonywalne w systemach Windows , Linux , Mac OS X , FreeBSD , Solaris i AIX . Jest to jeden z zalecanych konwerterów.
py2exe konwertuje skrypty Pythona na pliki wykonywalne tylko na platformie Windows.
Cython jest statycznym kompilatorem zarówno języka programowania Python, jak i rozszerzonego języka programowania Cython.
Trzecia opcja to cx_Freeze
wieloplatformowość.
cx_Freeze
od końca 2017 r. Nie ma żadnych wymienionych wersji na pypi. Czy ten projekt został porzucony?
może ci się podobać py2exe . znajdziesz tam również informacje o robieniu tego na Linuksie
Użyj py2exe .... użyj poniższych plików konfiguracji:
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()
)
Lubię pyinstaller - szczególnie wariant „okienkowy”:
pyinstaller --onefile --windowed myscript.py
Stworzy jeden plik * .exe w folderze dist /.
Polecam również pyinstaller
dla lepszej kompatybilności wstecznej, takiej jak python 2.3 - 2.7.
dla py2exe musisz mieć Python 2.6
W przypadku skryptów Python 3.2 jedynym wyborem jest Cxfreeze. Zbuduj go ze źródeł, inaczej nie będzie działać.
W przypadku python 2.x sugeruję pyinstaller, ponieważ może on spakować program python w jednym pliku wykonywalnym, w przeciwieństwie do CxFreeze, który wypisuje również biblioteki.
py2exe utworzy żądany plik exe, ale musisz mieć tę samą wersję MSVCR90.dll na komputerze, na którym będziesz używać nowego exe. Aby uzyskać więcej informacji, zobacz http://www.py2exe.org/index.cgi/Tutorial .
Listę narzędzi do dystrybucji można znaleźć na stronie @ https://wiki.python.org/moin/DistributionUtilities .
Korzystam z bbfreeze i działał bardzo dobrze (jeszcze nie ma wsparcia dla Pythona 3).
.so
plików lub skopiuje pliki .egg bezpośrednio i wszystkie one będą obecne w jednym katalogu (lub jako pojedynczy plik). Nie wymaga instalacji.
Korzystając z pyinstaller, znalazłem lepszą metodę, używając skrótu do .exe, a nie tworzenia --onefile
. W każdym razie prawdopodobnie są jakieś pliki danych, a jeśli korzystasz z aplikacji opartej na witrynie, twój program zależy również od plików HTML, JS, CSS. Nie ma sensu przenosić tych plików gdzieś… zamiast tego co, jeśli przesuniemy ścieżkę roboczą w górę.
Utwórz skrót do pliku exe, przesuń go u góry i ustaw ścieżki docelowe i początkowe, jak określono, aby ścieżki względne były w folderze dist \:
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żna zmienić nazwę skrótu na dowolną, zmieniając nazwę na „GTFS-Manager”
Teraz, kiedy podwoję -kliknij skrót, to tak, jakbym uruchomił plik w Pythonie! Znalazłem to podejście lepiej niż to, --onefile
ponieważ:
Och, pamiętaj, aby usunąć folder kompilacji po kompilacji, oszczędza na rozmiarze.
Użyj Cython, aby przekonwertować na c, skompilować i połączyć z gcc. Innym może być uczynienie podstawowych funkcji c (tymi, które chcesz utrudnić do odwrócenia), skompilowanie ich i użycie Python Boost do zaimportowania skompilowanego kodu (a ponadto masz znacznie szybsze wykonanie kodu). następnie użyj dowolnego narzędzia wymienionego do dystrybucji.
Powiedziano mi, że PyRun, https://www.egenix.com/products/python/PyRun/ , jest również opcją.