Jak mogę utworzyć bezpośrednio wykonywalną międzyplatformową aplikację GUI za pomocą Pythona?

263

Python działa na wielu platformach i może być używany w aplikacjach stacjonarnych i internetowych, dlatego doszedłem do wniosku, że istnieje sposób na skompilowanie go w plik wykonywalny dla komputerów Mac, Windows i Linux.

Problem w tym, że nie mam pojęcia, od czego zacząć ani jak napisać GUI, czy ktoś może rzucić na to trochę światła i skierować mnie w dobrym kierunku?

Teifion
źródło

Odpowiedzi:

285

Najpierw potrzebujesz biblioteki GUI z powiązaniami Pythona, a następnie (jeśli chcesz) jakiś program, który przekonwertuje skrypty Pythona na samodzielne pliki wykonywalne.

Wieloplatformowe biblioteki GUI z powiązaniami Pythona (Windows, Linux, Mac)

Oczywiście jest ich wiele, ale najbardziej popularne, które widziałem na wolności, to:

  • Tkinter - oparty na zestawie narzędzi Tk GUI (de facto standardowa biblioteka GUI dla Pythona, darmowa dla projektów komercyjnych)
  • WxPython - oparty na WxWidgets (popularny, bezpłatny dla projektów komercyjnych)
  • Qt przy użyciu powiązań PyQt lub Qt dla Python . Ten pierwszy nie jest darmowy dla projektów komercyjnych. Ten ostatni jest mniej dojrzały, ale można go używać za darmo.

Pełna lista znajduje się na stronie http://wiki.python.org/moin/GuiProgramming

Pojedynczy plik wykonywalny (wszystkie platformy)

  • PyInstaller - najbardziej aktywny (można go również używać z PyQt)
  • fbs - jeśli wybrałeś Qt powyżej

Pojedynczy plik wykonywalny (Windows)

  • py2exe - kiedyś najpopularniejszy

Pojedynczy plik wykonywalny (Linux)

  • Zatrzymaj - działa tak samo jak py2exe, ale działa na platformie Linux

Pojedynczy plik wykonywalny (Mac)

  • py2app - znowu działa jak py2exe, ale działa na Mac OS
lubos hasko
źródło
19
Porozmawiaj o pyinstaller dla Windows zamiast py2exe.
dziennik zmian
8
Warto zauważyć, że od 4.5 QT będzie na licencji LGPL.
CTT,
14
... i dlatego należy teraz bardzo dużo rozważyć użycie PySide która jest LGPL. Jest także bardziej Pythonic niż API Python 2 PyQt4.
Chris Morgan,
4
Możesz także dodać cx_Freeze , który jest wieloplatformowy, obsługiwany i obsługuje Python 3.x.
fbmd
2
Dlaczego nie ma tutaj wzmianki o Kivy ? Czy to nie jest poprawna opcja dla tego pytania?
SilSur,
56

Innym systemem (jeszcze nie wymienionym w zaakceptowanej odpowiedzi) jest PyInstaller, który pracował dla mojego projektu PyQt, gdy py2exe nie. Uznałem, że jest łatwiejszy w użyciu.

http://www.pyinstaller.org/

Pyinstaller jest oparty na Python Installer Gordona McMillana. Który nie jest już dostępny.

Jamie
źródło
1
Ponad 3 lata po napisaniu tej odpowiedzi Pyinstaller STILL nie obsługuje Python 3 i nie jest wymieniony w mapie przyszłych wydań. Mam na myśli, czy obsługa AIX i Solaris jest naprawdę bardziej przydatna niż Python 3?
Dave
11
Obsługuje teraz Python 2.7 oraz Python 3.3, 3.4 i 3.5.
Katu,
4
I teraz też 3.6.
Rexcirus
14

Alternatywnym narzędziem do py2exe jest bbfreeze, który generuje pliki wykonywalne dla systemu Windows i Linux. Jest nowszy niż py2exe i całkiem dobrze radzi sobie z jajkami. Przekonałem się, że magicznie działa lepiej bez konfiguracji dla szerokiej gamy aplikacji.

Michael Twomey
źródło
11

Istnieje również PyGTK , który jest w zasadzie opakowaniem Pythona dla Gnome Toolkit. Odkryłem, że łatwiej jest mi się skupić niż Tkinter, ponieważ praktycznie nie znałem wcześniej programowania GUI. Działa całkiem dobrze i ma kilka dobrych samouczków. Niestety nie ma jeszcze instalatora dla Python 2.6 dla Windows i może nie być przez jakiś czas.

Tofystedeth
źródło
6

Ponieważ python jest teraz domyślnie instalowany w prawie każdym systemie operacyjnym innym niż Windows, jedyną rzeczą, którą naprawdę musisz się upewnić, jest zainstalowanie wszystkich niestandardowych bibliotek, których używasz.

Powiedziawszy to, możliwe jest zbudowanie plików wykonywalnych zawierających interpreter języka Python i dowolne używane biblioteki. Może to jednak stworzyć duży plik wykonywalny.

MacOS X zawiera nawet obsługę Xcode IDE do tworzenia w pełni samodzielnych aplikacji GUI. Mogą być uruchamiane przez dowolnego użytkownika z systemem OS X.

Matthew Schinckel
źródło
6

W przypadku samego GUI:

PyQT jest właściwie referencją.

Innym sposobem opracowania szybkiego interfejsu użytkownika jest napisanie aplikacji internetowej, uruchomienie jej lokalnie i wyświetlenie aplikacji w przeglądarce.

Ponadto, jeśli wybierzesz opcję Tkinter sugerowaną przez lubos hasko, możesz spróbować portablepy, aby aplikacja działała w środowisku Windows bez Pythona.

fulmikoton
źródło
4

Nie jestem pewien, czy jest to najlepszy sposób, aby to zrobić, ale kiedy wdrażam aplikacje Ruby GUI (nie Python, ale ma ten sam „problem”, jeśli chodzi o pliki .exe) w systemie Windows, po prostu piszę krótki program uruchamiający w języku C #, który wywołuje mój główny skrypt. Kompiluje się do pliku wykonywalnego, a następnie mam plik wykonywalny aplikacji.

Brian Warshaw
źródło
@Brian Czy widziałeś technikę _why do samodzielnego uruchamiania aplikacji Shoes? Prawdopodobnie można to zrobić za pomocą programów innych niż Buty.
Adam Lassek,
W przypadku tych aplikacji żaden z moich użytkowników nie jest anonimowy. Wiem, czy mają środowisko uruchomieniowe, a jeśli nie, mogę je dla nich zainstalować. Głównym problemem w tym temacie jest sposób uruchamiania tych aplikacji bez konieczności otwierania wiersza polecenia i wpisywania pliku wykonywalnego środowiska wykonawczego, a następnie nazwy programu.
Brian Warshaw
2
# I'd use tkinter for python 3

import tkinter

tk = tkinter.Tk()
tk.geometry("400x300+500+300")
l = Label(tk,text="")
l.pack()
e = Entry(tk)
e.pack()

def click():
    e['text'] = 'You clicked the button'

b = Button(tk,text="Click me",command=click)
b.pack()

tk.mainloop()

# After this I would you py2exe
# search for the use of this module on stakoverflow
# otherwise I could edit this to let you know how to do it

py2exe

Następnie powinieneś użyć py2exe, na przykład, aby przynieść do jednego folderu wszystkie pliki potrzebne do uruchomienia aplikacji, nawet jeśli użytkownik nie ma Pythona na swoim komputerze (mówię o systemie Windows ... dla Apple OS nie ma potrzeby pliku wykonywalnego, tak myślę, ponieważ pochodzi z Pythona bez potrzeby instalowania go.

Utwórz ten plik

1) Utwórz plik setup.py

z tym kodem:

from distutils.core import setup
import py2exe

setup(console=['l4h.py'])

zapisz go w folderze

2) Umieść swój program w tym samym folderze pliku setup.py. W tym folderze umieść program, który chcesz udostępnić: es: l4h.py

ps: zmień nazwę pliku (z l4h na cokolwiek chcesz, to jest przykład)

3) Uruchom cmd z tego folderu (w folderze kliknij prawym przyciskiem myszy + Shift i wybierz opcję Rozpocznij cmd tutaj)
4) Napisz w cmd:> python setup.py py2exe
5) w folderze dist są wszystkie potrzebne pliki
6) można go skompresować i rozpowszechniać

Pyinstaller

Zainstaluj go z cmd

**

pip install pyinstaller

**

Uruchom go z cmd z folderu, w którym znajduje się plik

**

pyinstaller file.py

**

Giovanni G. PY
źródło
2

PySimpleGUI otacza tkinter i działa na Pythonie 3 i 2.7. Działa również na Qt, WxPython i przeglądarce internetowej, używając tego samego kodu źródłowego dla wszystkich platform.

Możesz tworzyć niestandardowe GUI, które wykorzystują wszystkie te same widżety, które znajdziesz w tkinter (suwaki, pola wyboru, przyciski opcji, ...). Kod wydaje się być bardzo zwarty i czytelny.

#!/usr/bin/env python
import sys
if sys.version_info[0] >= 3:
    import PySimpleGUI as sg
else:
    import PySimpleGUI27 as sg

layout = [[ sg.Text('My Window') ],
          [ sg.Button('OK')]]

window = sg.Window('My window').Layout(layout)
button, value = window.Read()

Obraz utworzony z opublikowanego kodu PySimpleGUI

Jak wyjaśniono w dokumentacji PySimpleGUI , aby zbudować uruchamiany plik .EXE :

pyinstaller -wF MyGUIProgram.py

MikeyB
źródło
1

Nie musisz się kompilować Pythona dla komputerów Mac / Windows / Linux. Jest to język interpretowany, więc wystarczy mieć zainstalowany interpreter Pythona w wybranym systemie (jest dostępny dla wszystkich trzech platform).

Jeśli chodzi o bibliotekę GUI, która działa na wielu platformach, biblioteka widżetów Tk / Tcl Pythona działa bardzo dobrze i uważam, że jest wystarczająco wieloplatformowa.

Tkinter to interfejs Pythona do Tk / Tcl

Ze strony internetowej projektu python:

Tkinter nie jest jedynym zestawem narzędzi GuiProgramming dla Pythona. Jest to jednak najczęściej używany i prawie jedyny, który można przenosić między systemami Unix, Mac i Windows

Justin Standard
źródło
4
Jak więc stworzyć pakiet instalacyjny do wdrożenia w systemach ludzi, którzy chcą tylko instalacji 1-etapowej (np. Dwukrotnie kliknąć pojedynczy pakiet instalacyjny w systemie Windows)?
Craig McQueen
W tym celu istnieje kilka podejść: prawdopodobnie napiszesz instalatora w skrypcie wsadowym lub skompilujesz dla systemu docelowego, który upuści gdzieś potrzebne pliki i zainstaluje potrzebne biblioteki i środowiska wykonawcze.
Justin Standard
1
Instalowanie Pythona w ramach własnej instalacji byłoby trochę kłopotliwe, ponieważ musiałbyś poradzić sobie z możliwością zainstalowania niewłaściwej wersji Pythona. Musisz zainstalować obok siebie, aby aplikacja mogła uzyskać dostęp do nowo zainstalowanej wersji Pythona, ale wszystkie istniejące aplikacje nadal używały starej wersji Pythona. (tzn. bez bałaganu, np. skojarzenie pliku .py lub ŚCIEŻKA)
Jonathan Hartley,
Bardziej prawdopodobne jest, że Twój instalator sprawdzi istnienie odpowiedniej wersji Pythona, a jeśli ją znajdzie, użyj jej, w przeciwnym razie zainstaluj Pythona jako część procesu instalacji.
Justin Standard,
Racja - ale ta druga opcja „w przeciwnym razie zainstaluj Pythona jako część procesu instalacji”, właśnie o tym mówię. To byłoby dziwne, z powodów, które podałem.
Jonathan Hartley,
0

Możesz użyć appJardo podstawowego programowania GUI.

from appJar import gui

num=1

def myfcn(btnName):   
    global num
    num +=1
    win.setLabel("mylabel", num)

win = gui('Test')

win.addButtons(["Set"],  [myfcn])
win.addLabel("mylabel", "Press the Button")

win.go()

GUI podczas działania

Zobacz dokumentację na stronie appJar .

Instalacja odbywa się za pomocą pip install appjarwiersza poleceń.

shahar_m
źródło
0

!!! KIVY !!!

Byłem zaskoczony, widząc, że nikt nie wspominał o Kivy !!!

Kiedyś zrobiłem projekt przy użyciu Tkintera, chociaż oni opowiadają się za tym, że bardzo się poprawił, nadal daje mi wrażenie systemu Windows 98, więc przeszedłem na Kivy .

Śledzę z samouczka serii , czy to pomaga ...

Aby dać wyobrażenie o tym, jak wygląda kivy, zobacz to (projekt, nad którym pracuję):

Projekt, nad którym pracuję

Pracuję nad tym już od tygodnia! Korzyści dla Kivy, o które pytasz? Sprawdź to

Powodem, dla którego zdecydowałem się na to, jest jego wygląd i że można go również używać w urządzeniach mobilnych.

Ritveak
źródło