Jak spakować aplikacje Pythona za pomocą Aktówki BeeWare

Python nie spełnia wymagań w kilku obszarach. Na przykład Python nie jest najszybszym językiem, ale biblioteki innych firm, takie jak NumPy, pozwalają ci to obejść. Jednak najbardziej brakiem Pythona jest pakowanie. Oznacza to, że w Pythonie brakuje spójnego wewnętrznego mechanizmu generowania samodzielnego pliku binarnego z aplikacji. Idź i Rust to zrób. Dlaczego Python nie może?

Sprowadza się to głównie do tego, że Python do niedawna w swojej historii nie miał kultury takich przypadków użycia. I tak, dopiero stosunkowo niedawno zaczęły pojawiać się moduły innych firm, które umożliwiają pakowanie aplikacji Python jako samodzielnych plików binarnych. PyInstaller - o którym pisałem wcześniej - jest jedną z takich aplikacji. W tym artykule przyjrzymy się jeszcze bardziej eleganckiemu i potężnemu narzędziu do pakowania aplikacji w języku Python - Aktówce BeeWare.

[Również na: Python virtualenv i venv co robić, a czego nie]

W przypadku Aktówki warto jednak zwrócić uwagę na dwa zastrzeżenia. Po pierwsze, Aktówka nie obsługuje pakietów międzyplatformowych; musisz zbudować na platformie, dla której wdrażasz. Po drugie, Aktówka działa najlepiej z aplikacjami, które korzystają z jakiegoś zestawu narzędzi GUI. Poniżej omówimy szczegółowo te kwestie.

Co to jest teczka BeeWare?

Aktówka jest częścią ogólnego zestawu narzędzi BeeWare do tworzenia aplikacji, gdzie różne elementy wzajemnie się uzupełniają. Na przykład Kivy firmy BeeWare umożliwia tworzenie wieloplatformowych aplikacji GUI w języku Python, które działają nie tylko na wszystkich głównych platformach systemu operacyjnego, ale także w Internecie. Ale tutaj skupimy się na teczce, której można używać z innymi narzędziami lub bez nich.

Aktówka zawiera aplikacje dla wszystkich obsługiwanych przez nią systemów operacyjnych za pomocą wspólnego formatu aplikacji na tej platformie:

  • Microsoft Windows (instalator MSI)
  • macOS ( .app plik formatu)
  • Linux (AppImage)
  • iOS (projekt Xcode)
  • Android (projekt Gradle)

Aby wdrożyć w systemie iOS lub Android, potrzebujesz zestawów programistycznych dla tych platform.

Jedną rzeczą, której Aktówka  nie  obsługuje, jest wdrażanie na wielu platformach. Na przykład, jeśli jesteś użytkownikiem systemu Windows, nie możesz zbudować aplikacji dla systemu macOS; do tego potrzebny będzie system MacOS. Inne pakiety aplikacji dla Pythona są podobnie ograniczone, więc to ograniczenie nie dotyczy wyłącznie Aktówki.

Aktówka nie jest także „kompilatorem” - nie przekształca programów Pythona w ich natywne odpowiedniki w kodzie maszynowym. Twoje aplikacje nie będą działać szybciej, gdy zostaną wdrożone jako aplikacje Aktówki, niż normalnie.

Konfiguracja projektu teczki

Aktówka wymaga skonfigurowania dedykowanego katalogu projektu z własnym środowiskiem wirtualnym. Jeśli nie znasz jeszcze „venvs”, jak nazywa się wirtualne środowiska Pythona, warto się do nich przyzwyczaić, ponieważ najnowocześniejszy rozwój Pythona w dużej mierze obraca się wokół nich.

Po skonfigurowaniu venv i  pip install briefcase rozpoczęciu korzystania z niego, będziesz używać własnego narzędzia wiersza poleceń Aktówki do konfigurowania, zarządzania i dostarczania projektów spakowanych w Aktówkę. Jest to podobne do sposobu, w jaki działają narzędzia takie jak Poezja: większość interakcji z projektem na wysokim poziomie odbywa się za pośrednictwem narzędzia, więc nie musisz ręcznie tworzyć plików ani edytować konfiguracji.

Aby rozpocząć nowy projekt Aktówki, otwórz CLI w katalogu swojego projektu, aktywuj środowisko wirtualne (zakładając, że nie używasz interfejsu CLI IDE do robienia tego automatycznie) i wpisz  briefcase new. Spowoduje to utworzenie szkieletu w katalogu projektu dla projektu Aktówki.

Najpierw musisz odpowiedzieć na kilka pytań dotyczących projektu, a dla większości z nich możesz po prostu nacisnąć,  Enter aby zaakceptować ustawienie domyślne. Ale jedno z pytań, które zostaniesz zadane - a właściwie ostatnie - ma ogromne znaczenie: wybór frameworka GUI do użycia.

Jedną z innych ofert BeeWare jest zestaw narzędzi UI o nazwie Toga, do tworzenia graficznych interfejsów użytkownika w programach Python przy użyciu komponentów interfejsu użytkownika natywnych dla platformy. Jeśli chcesz wskoczyć w naukę Togi, jednocześnie pracując z Aktówką, nic Cię nie powstrzyma. Możesz też wybrać opcję „Brak” i utworzyć aplikację „bezgłową” uruchamianą z wiersza poleceń lub użyć zestawu narzędzi lub systemu okienkowego innej firmy, takiego jak Pyglet lub PyQT.

Zwróć uwagę, że jeśli nie zainstalujesz zestawu narzędzi interfejsu użytkownika, aplikacja nie będzie miała żadnej interakcji z konsolą - tj. Nie otworzy okna konsoli i nie wydrukuje niczego na konsoli. Jest to przydatne, jeśli wdrażasz program, który nie wymaga interakcji z konsolą - na przykład, jeśli działa jako lokalny serwer WWW i używa przeglądarki internetowej do interakcji. Ale na razie nie ma opcji, aby umożliwić uruchamianie programów Aktówki bez zainstalowanego pakietu UI z konsolą.

Struktura projektu teczki

Świeżo zainicjowany katalog aplikacji Aktówka zawiera kilka wstępnie zainstalowanych plików:

  • Najwyższy poziom katalogu aplikacji zawiera licencję projektu,  pyproject.toml plik, przykładowy plik README w formacie ReStructured Text oraz  .gitignore plik, który jest wstępnie dostosowany z typowymi katalogami, które można pominąć w dowolnym repozytorium Git utworzonym dla projektu.
  • src Katalog zawiera kod źródłowy aplikacji, z dwoma podkatalogów: jeden zawierający aplikację (ma taką samą nazwę jak katalogu projektu) oraz jednym, który zawiera metadane aplikacji.
  • Katalog aplikacji zawiera  resources katalog, który służy do przechowywania zasobów, takich jak ikony aplikacji.

Polecenia projektu teczki

briefcase Komenda sposób można wykonać większość interakcji z projektem teczki. Omówiliśmy  new powyżej polecenie, które służy do skonfigurowania projektu Aktówki w danym folderze. Ale zazwyczaj będziesz potrzebować wielu innych poleceń podczas cyklu życia aplikacji Aktówka, a niektóre z nich mogą być trochę sprzeczne z intuicją.

Oto najczęściej używane polecenia dotyczące Aktówki:

  • dev: Gdy jesteś w katalogu aplikacji, to polecenie uruchamia tę aplikację w  trybie deweloperskim . Tryb deweloperski umożliwia uruchamianie aplikacji z pełnym zestawem zainstalowanych bibliotek, ale bez konieczności formalnego pakowania w celu dostarczenia. W większości przypadków podczas tworzenia aplikacji będziesz testować ją w trybie deweloperskim. Jeśli jakiekolwiek zależności uległy zmianie od czasu ostatniego uruchomienia  dev, użyj  -d flagi, aby je zaktualizować.
  • build: Tworzy kopię aplikacji w postaci potrzebnej do spakowania jej do dystrybucji. Różni się to od  dev tego, że można budować dla różnych platform, jeśli zainstalowane jest rusztowanie.
  • update: Aktualizuje kompilację aplikacji. Jest to szybki sposób na upewnienie się, że kompilacja aplikacji zawiera najnowszy kod, a nie używanie go build, co powoduje ponowne  wygenerowanie znacznie większej liczby plików. Przekaż  -d flagę, aby zaktualizować zależności, i  -rflagę, aby zaktualizować zasoby (czyli skopiować zasoby z wersji deweloperskiej aplikacji do wersji kompilacji).
  • run: Uruchamia zbudowaną wersję aplikacji. To zasadniczo symuluje działanie spakowanej i wdrożonej wersji aplikacji. Przekaż  -u flagę, aby zaktualizować dowolny kod przed uruchomieniem.
  • package: Tworzy pakiet instalatora aplikacji z wbudowanej wersji aplikacji. Końcowym rezultatem tego jest artefakt, który możesz przekazać innym, aby zainstalowali Twój program - np. Plik .MSI w systemie Windows.

Oto niektóre z rzadziej używanych poleceń Aktówki: 

  • create: Nie należy go mylić  newcreate tworzy szkielet dla instalatora aplikacji - sposób na zbudowanie instalatora aplikacji dla określonej platformy. Kiedy konfigurujesz aplikację w  new, jest ona wyposażona w rusztowanie dla platformy, na której pracujesz; create umożliwia w razie potrzeby dodanie rusztowania dla innej platformy. 
  • upgrade: Aktualizuje komponenty używane do pakowania aplikacji, takie jak framework Wix.
  • publish: Publikuje spakowaną aplikację w kanale publikacji, takim jak sklep z aplikacjami. (W chwili pisania tego tekstu ta funkcja jeszcze nie działa.)

Podsumowując, jest to kolejność, w jakiej należy używać poleceń Aktówki w typowym cyklu życia aplikacji:

  • new aby stworzyć aplikację
  • dev aby uruchomić aplikację podczas pracy nad nią
  • build aby utworzyć wersję aplikacji do spakowania do dystrybucji
  • run w celu przetestowania spakowanej wersji aplikacji
  • update aby zachować aktualność spakowanej wersji aplikacji ze zmianami kodu
  • package aby wdrożyć spakowaną wersję aplikacji z instalatorem

Tworzenie aplikacji aktówki

Tworzenie programu w języku Python jako aplikacji Aktówki przebiega tak samo, jak tworzenie dowolnej innej aplikacji w języku Python. Główne kwestie dotyczą struktury projektu. Punkt wejścia aplikacji znajduje się  __main__.py w katalogu aplikacji, który jest ładowany  app.py z tego samego katalogu i wykonywany  main(). Po zainicjowaniu projektu zostanie on wypełniony zastępczymi wersjami niektórych plików projektu, które można rozbudować lub zastąpić w razie potrzeby.

Jeśli przekształcasz  istniejący  projekt w celu użycia Aktówki, upewnij się, że masz taką strukturę, aby jego punkt wejścia był zgodny z oczekiwaniami Aktówki. Na przykład, jeśli nie przechowujesz kodu w  src katalogu, musisz przenieść kod do  src i naprawić wszelkie niezgodności w jego ścieżkach i strukturach katalogów.

Inną rzeczą, o której należy pamiętać, jest sposób obsługi zależności innych firm. pyproject.toml Plik w katalogu projektu kontroli Zależności, które chcesz dodać do projektu. Jeśli twój projekt jest nazwany  myprojectpyproject.toml będzie zawierał sekcję o nazwie  [tool.briefcase.app.myproject], z  requires wierszem, w którym wymienione są wszystkie wymagania, tak jak zostałyby określone w  requirements.txt pliku. Jeśli Twój projekt potrzebuje na przykład  regex i  black, ustaw tę linię na  requires = ["regex","black"]. Następnie należy użyć  briefcase dev -d do zaktualizowania zależności dla wersji deweloperskiej projektu i  briefcase update -d zaktualizowania zależności w wersji spakowanej.

Pakowanie i dostawa teczki aplikacji

Po uruchomieniu zobaczysz  briefcase package, że plik redystrybucyjny dla twojego programu pojawi się w podkatalogu katalogu projektu, który odpowiada platformie, dla której zbudowałeś. Na przykład w przypadku systemu Microsoft Windows katalog będzie windows, a pakiet  redystrybucyjny będzie  .msi plikiem o tej samej nazwie, co projekt. W przypadku systemów Android i iOS wynikiem będą odpowiednio projekty dla Gradle i Xcode, które będą musiały zostać skompilowane przy użyciu tych narzędzi, aby można je było wdrożyć na tych platformach.

Jak zrobić więcej w Pythonie

  • Jak uruchomić Anacondę obok innych Pythonów
  • Jak używać klas danych Pythona
  • Zacznij korzystać z async w Pythonie
  • Jak używać asyncio w Pythonie
  • 3 kroki do przeglądu asynchronicznego Pythona
  • Jak używać PyInstaller do tworzenia plików wykonywalnych Pythona
  • Samouczek Cythona: Jak przyspieszyć Pythona
  • Jak zainstalować Pythona w inteligentny sposób
  • Jak zarządzać projektami w Pythonie za pomocą Poetry
  • Jak zarządzać projektami w Pythonie za pomocą Pipenv
  • Virtualenv i venv: wyjaśniono wirtualne środowiska Pythona
  • Python virtualenv i venv co robić, a czego nie
  • Wyjaśnienie wątków i podprocesów w Pythonie
  • Jak korzystać z debugera Pythona
  • Jak używać timeit do profilowania kodu Pythona
  • Jak używać cProfile do profilowania kodu Pythona
  • Jak przekonwertować Python na JavaScript (iz powrotem)