Python kommer til kort i nogle få områder. For eksempel er Python ikke det hurtigste sprog, men tredjepartsbiblioteker som NumPy giver dig mulighed for at omgå det. Hvor Python er mest mangelfuld, er emballage. Det vil sige, Python mangler en konsistent intern mekanisme til at generere en enkeltstående binær fra en applikation. Gå og Rust gør dette. Hvorfor kan Python ikke?
Det kommer hovedsageligt ned til, at Python ikke har en kultur af sådanne brugssager indtil relativt for nylig i sin historie. Og så først relativt nylig begyndte tredjepartsmoduler at dukke op, der gør det muligt at pakke Python-apps som enkeltstående binære filer. PyInstaller - som jeg tidligere dækkede - er en sådan app. I denne artikel vil vi se på et endnu mere elegant og kraftfuldt værktøj til Python-app-emballage, BeeWares dokumentmappe.
[Også på: Python virtualenv og venv do's and don'ts]
Der er dog to advarsler, der er værd at påpege om Rejsetaske. For det første laver Kuffert ikke emballage på tværs af platforme; du skal bygge på den platform, du implementerer til. For det andet fungerer Rejsetaske bedst med apps, der bruger en GUI-værktøjssæt af en slags. Vi vil gå i detaljer om disse problemer nedenfor.
Hvad er BeeWare dokumentmappe?
Rejsetaske er en del af en generel række værktøjer fra BeeWare til oprettelse af apps, hvor de forskellige stykker supplerer hinanden. For eksempel lader BeeWare's Kivy dig oprette GUI-apps på tværs af platforme i Python, der ikke kun kører på alle de større OS-platforme, men også på internettet. Men her vil vi fokusere på Rejsetaske, som kan bruges med eller uden de andre værktøjer.
Rejsetaske pakker apps til alle operativsystemer, den understøtter ved hjælp af et fælles format til apps på den platform:
- Microsoft Windows (MSI-installationsprogram)
- macOS (
.app
formatfil) - Linux (AppImage)
- iOS (Xcode-projekt)
- Android (Gradle-projekt)
For at implementere på iOS eller Android skal du bruge udviklingssættene til disse platforme.
Én ting som Rejsetaske gørikke support er implementering på tværs af platforme. For eksempel, hvis du er en Windows-bruger, kan du ikke oprette en macOS-app; du har brug for macOS for at gøre det. Andre app-bundlere til Python er tilsvarende begrænsede, så denne begrænsning er på ingen måde eksklusiv for Rejsetaske.
Rejsetaske er heller ikke en "kompilator" - den omdanner ikke Python-programmer til deres oprindelige maskinkodeækvivalenter. Dine apps kører ikke hurtigere, når de implementeres som dokumentmappe-apps, end de normalt gør.
Opsætning af dokumentmappeprojekt
Rejsetaske kræver, at du opretter en dedikeret projektmappe med sit eget virtuelle miljø. Hvis du endnu ikke er bekendt med "venvs", som Python-virtuelle miljøer kaldes, er det værd at komme op i hastighed på dem, da avanceret Python-udvikling drejer sig meget om dem.
Når du har oprettet en venv ogpip install dokumentmappe
ind i det bruger du Briefcases egen kommandolinjeværktøj til at oprette, styre og levere Briefcase-pakket projekter. Dette ligner den måde, værktøjer som poesi fungerer på: De fleste af dine interaktioner på højt niveau med projektet er gennem værktøjet, så du behøver ikke manuelt oprette filer eller redigere konfigurationer.
For at starte et nyt dokumentmappe skal du åbne CLI i dit projektmappe, aktivere det virtuelle miljø (forudsat at du ikke bruger en IDE's CLI til at gøre det automatisk) og skrivedokumentmappe ny
. Dette skaber stilladser i din projektmappe til et dokumentmappe-projekt.
Du bliver nødt til at besvare nogle spørgsmål om projektet først, og for de fleste af dem kan du bare trykke påGå ind
for at acceptere standard. Men et af de spørgsmål, du bliver stillet - det sidste, betyder faktisk meget: valget af GUI-ramme, der skal bruges.
Et af BeeWares andre tilbud er et UI-værktøjssæt kaldet Toga til oprettelse af GUI'er i Python-programmer ved hjælp af platform-native UI-komponenter. Hvis du vil springe ind i at lære Toga, mens du også arbejder med Rejsetaske, er der intet der stopper dig. Eller du kan vælge “Ingen” og oprette en “hovedløs” app, der kører fra kommandolinjen, eller du kan bruge et tredjeparts-UI-værktøjssæt eller et vinduessystem, såsom Pyglet eller PyQT.
Bemærk, at hvis du ikke installerer noget UI-værktøjssæt, har appen ingen konsolinteraktivitet overhovedet - dvs. det åbner ikke et konsolvindue, og den udskriver ikke noget til konsollen. Dette er nyttigt, hvis du implementerer et program, der ikke kræver konsolinteraktion - for eksempel hvis det kører som en lokal webserver og bruger en webbrowser til interaktion. Men der er endnu ingen mulighed for at lade kuffertprogrammer uden UI-pakke installeret køre med en konsol.
Dokumentmappe projekt struktur
En nystartet Kuffert-appmappe leveres med flere forudinstallerede filer:
- Det øverste niveau i appkataloget indeholder projektets licens,
pyproject.toml
fil, en prøve README-fil i ReStructured Text-format og en.gitignore
fil, der er prætilpasset med almindelige mapper, der skal udelades fra ethvert Git-lager, der er oprettet til projektet. - Det
src
bibliotek indeholder kildekoden til din app med to underkataloger: en der indeholder appen (den har samme navn som din projektmappe) og en der indeholder appens metadata. - App-biblioteket indeholder en
ressourcer
bibliotek, som bruges til at gemme ressourcer som applikationsikoner.
Kommandoer til dokumentmappe
Detmappe
kommando er, hvordan du udfører de fleste af dine interaktioner med et dokumentmappe-projekt. Vi dækkedeny
kommandoen ovenfor, som bruges til at oprette et dokumentmappeprojekt i en given mappe. Men du skal typisk bruge mange andre kommandoer i løbet af en dokumentmappes app, og nogle af dem kan være lidt kontraintuitive.
Her er de mest almindelige dokumentmappekommandoer, du bruger:
dev
: Når du er inde i et appkatalog, kører denne kommando den pågældende appdev-tilstand. Dev-tilstand giver dig mulighed for at køre applikationen med sit fulde komplement af installerede biblioteker, men uden at skulle være formelt pakket til levering. Når du udvikler din applikation, testes det oftest med dev-tilstand. Hvis nogen afhængigheder er ændret siden sidste gang du løbdev
, brug-d
flag for at opdatere dem.bygge
: Bygger en kopi af applikationen i den form, der er nødvendig for at pakke den til distribution. Dette adskiller sig fradev
ved at du kan bygge til forskellige platforme, hvis stilladset er installeret.opdatering
: Opdaterer en applikationsopbygning. Dette er den hurtige måde at sikre, at build af din applikation har den nyeste kode i stedet for at brugebygge
, som regenererer mange flere filer. Gå forbi-d
flag for at opdatere afhængigheder, og-r
flag for at opdatere ressourcer (dvs. kopiere ressourcer fra dev-versionen af din app til buildversionen).løb
: Kører den indbyggede version af appen. Dette simulerer i det væsentlige at køre den pakkede og implementerede version af applikationen. Gå forbi-u
flag for at opdatere enhver kode, før du kører.pakke
: Opretter en applikationsinstallationspakke fra den indbyggede version af appen. Slutresultatet af dette er en artefakt, du kan give andre til at installere dit program - f.eks. En .MSI på Windows.
Her er nogle af de mindre almindeligt anvendte dokumentmappekommandoer:
skab
: Ikke at forveksle medny
,skab
opretter stilladset til en applikationsinstallatør - en måde at opbygge appens installationsprogram til en bestemt platform. Når du opretter en app medny
, det leveres med stillads til den platform, du arbejder på;skab
lader dig tilføje stilladser til en anden platform, hvis det er nødvendigt.opgradere
: Opgraderer de komponenter, der bruges til at pakke appen, såsom Wix-rammen.offentliggøre
: Udgiver den pakkede app til en publikationskanal, f.eks. En appbutik. (I skrivende stund fungerer denne funktion endnu ikke.)
For at opsummere er dette den rækkefølge, som du vil bruge dokumentmappekommandoer i den typiske app-livscyklus:
ny
for at oprette appendev
at køre appen, mens du arbejder på denbygge
at oprette en version af den app, der skal pakkes til distributionløb
for at testkøre den pakkede version af appenopdatering
for at holde den pakkede version af appen opdateret med kodeændringerpakke
at distribuere den pakkede version af appen med et installationsprogram
Oprettelse af dokumentmappe-app
Oprettelse af et Python-program som en Rejsetaske-app er meget det samme som at oprette enhver anden Python-app. Hovedproblemerne involverer projektstrukturen. Appens indgangssted er__main__.py
i app-biblioteket, der indlæsesapp.py
fra samme bibliotek og udførerhoved ()
. Når du initialiserer et projekt, udfyldes det med pladsholderversioner af nogle projektfiler, som du kan opbygge eller udskifte efter behov.
Hvis du transformerer eneksisterende projekt for at bruge Rejsetaske, skal du sørge for at strukturere det på en sådan måde, at indgangsstedet er, som Dokumentmappen forventer. For eksempel, hvis du ikke gemte koden i ensrc
bibliotek, skal du flytte din kode tilsrc
og rette eventuelle inkompatibiliteter i dens stier og katalogstrukturer.
Den anden ting at huske på er, hvordan man håndterer tredjepartsafhængigheder. Detpyproject.toml
fil i din projektmappe styrer, hvilke afhængigheder der skal tilføjes til projektet. Hvis dit projekt er navngivetmit projekt
, derefterpyproject.toml
vil indeholde en sektion med navnet[tool.briefcase.app.myproject]
, med enkræver
linje, der viser hvert krav, som de ville være specificeret i enkrav.txt
fil. Hvis dit projekt f.eks. Har brug forregex
ogsort
, ville du indstille den linje tilkræver = ["regex", "sort"]
. Du ville derefter brugedokumentmappe dev -d
at opdatere afhængighederne for udviklingsversionen af projektet ogdokumentmappeopdatering -d
for at opdatere afhængigheder i den pakkede version.
Dokumentmappe-emballage og levering
Når du løberdokumentmappepakke
, vil du se en omfordeling til dit program vises i en underkatalog til projektmappen, der svarer til den platform, du byggede til. For Microsoft Windows vil biblioteket f.eks. Værevinduer
, og den omfordelbare enhed vil være en.msi
fil med samme navn som dit projekt. For Android og iOS vil resultaterne være projekter for henholdsvis Gradle og Xcode, og disse skal kompileres ved hjælp af disse værktøjer, der kan implementeres på disse platforme.
Sådan gør du mere med Python
- Sådan køres Anaconda side om side med andre pythoner
- Sådan bruges Python-dataglas
- Kom godt i gang med async i Python
- Sådan bruges asyncio i Python
- 3 trin til en Python async-eftersyn
- Sådan bruges PyInstaller til at oprette Python-eksekverbare filer
- Cython tutorial: Sådan fremskyndes Python
- Sådan installeres Python på den smarte måde
- Sådan styres Python-projekter med Poetry
- Sådan styres Python-projekter med Pipenv
- Virtualenv og venv: Python virtuelle miljøer forklaret
- Python virtualenv og venv do's and don'ts
- Python-gevind og underprocesser forklaret
- Sådan bruges Python debugger
- Sådan bruges timeit til at profilere Python-kode
- Sådan bruges cProfile til profilering af Python-kode
- Sådan konverteres Python til JavaScript (og tilbage igen)