Come creare pacchetti di app Python con BeeWare Briefcase
Python non è all'altezza in alcune aree. Ad esempio, Python non è il linguaggio più veloce in circolazione, ma le librerie di terze parti come NumPy ti consentono di aggirare questo problema. Dove Python è più carente, però, è il packaging. Cioè, Python non dispone di un meccanismo interno coerente per la generazione di un binario autonomo da un'applicazione. Vai e Rust fallo. Perché non può Python?
Principalmente si tratta di Python che non ha una cultura di tali casi d'uso fino a tempi relativamente recenti nella sua storia. E così, solo relativamente di recente sono stati visualizzati moduli di terze parti che consentono alle app Python di essere pacchettizzate come binari autonomi. PyInstaller, di cui ho parlato in precedenza, è una di queste app. In questo articolo vedremo un'utilità ancora più elegante e potente per la creazione di pacchetti di app Python, la valigetta di BeeWare.
[Anche su: Python virtualenv e venv cosa fare e cosa non fare]
Tuttavia, ci sono due avvertenze che vale la pena sottolineare su Briefcase. Innanzitutto, Briefcase non esegue il packaging multipiattaforma; devi costruire sulla piattaforma per la quale stai distribuendo. In secondo luogo, Briefcase funziona meglio con le app che utilizzano un toolkit GUI di qualche tipo. Entreremo nei dettagli di questi problemi di seguito.
Cos'è la valigetta BeeWare?
Briefcase fa parte di una suite generale di strumenti di BeeWare per la creazione di app, con i diversi pezzi che si completano a vicenda. Ad esempio, Kivy di BeeWare ti consente di creare app GUI multipiattaforma in Python che funzionano non solo su tutte le principali piattaforme OS ma anche sul web. Ma qui ci concentreremo su Briefcase, che può essere utilizzato con o senza gli altri strumenti.
La valigetta racchiude app per tutti i sistemi operativi supportati tramite un formato comune per le app su quella piattaforma:
- Microsoft Windows (programma di installazione MSI)
- macOS (
.app
file di formato) - Linux (AppImage)
- iOS (progetto Xcode)
- Android (progetto Gradle)
Per distribuire su iOS o Android, avrai bisogno dei kit di sviluppo per quelle piattaforme.
Una cosa che Briefcase non supporta è la distribuzione multipiattaforma. Ad esempio, se sei un utente Windows, non puoi creare un'app macOS; avrai bisogno di macOS per farlo. Altri bundler di app per Python sono similmente limitati, quindi questa restrizione non è in alcun modo esclusiva di Briefcase.
Briefcase non è nemmeno un "compilatore": non trasforma i programmi Python nei loro equivalenti nativi del codice macchina. Le tue app non verranno eseguite più velocemente quando distribuite come app Sincronia file rispetto a quanto fanno normalmente.
Configurazione del progetto valigetta
Briefcase richiede di impostare una directory di progetto dedicata con il proprio ambiente virtuale. Se non hai ancora familiarità con "venvs", come vengono chiamati gli ambienti virtuali Python, vale la pena aggiornarsi su di essi, poiché lo sviluppo all'avanguardia di Python ruota fortemente attorno ad essi.
Dopo aver configurato un venv e pip install briefcase
in esso, utilizzerai gli strumenti della riga di comando di Briefcase per configurare, gestire e distribuire progetti in pacchetto Briefcase. Questo è simile al modo in cui funzionano strumenti come Poetry: la maggior parte delle interazioni di alto livello con il progetto avvengono attraverso lo strumento, quindi non è necessario creare manualmente file o modificare configurazioni.
Per avviare un nuovo progetto Briefcase, apri la CLI nella directory del tuo progetto, attiva l'ambiente virtuale (supponendo che tu non stia utilizzando una CLI dell'IDE per farlo automaticamente) e digita briefcase new
. Questo crea scaffolding nella directory del progetto per un progetto Briefcase.
All'inizio dovrai rispondere ad alcune domande sul progetto e per la maggior parte di esse puoi semplicemente premere Enter
per accettare l'impostazione predefinita. Ma una delle domande che ti verranno poste - l'ultima, appunto - è molto importante: la scelta del framework GUI da utilizzare.
Una delle altre offerte di BeeWare è un toolkit dell'interfaccia utente chiamato Toga, per la creazione di GUI nei programmi Python utilizzando componenti dell'interfaccia utente nativi della piattaforma. Se vuoi iniziare ad imparare Toga mentre lavori anche con Briefcase, non c'è niente che ti fermi. Oppure puoi selezionare "Nessuno" e creare un'app "headless" che viene eseguita dalla riga di comando, oppure puoi utilizzare un toolkit UI di terze parti o un sistema a finestre come Pyglet o PyQT.
Nota che se non installi alcun toolkit dell'interfaccia utente, l'app non avrà alcuna interattività della console, ovvero non aprirà una finestra della console e non stamperà nulla sulla console. Ciò è utile se si distribuisce un programma che non richiede l'interazione con la console, ad esempio se viene eseguito come server Web locale e utilizza un browser Web per l'interazione. Ma non esiste ancora alcuna opzione per consentire ai programmi Briefcase senza pacchetto dell'interfaccia utente installato di funzionare con una console.
Briefcase struttura del progetto
Una directory dell'app Briefcase appena avviata viene fornita con diversi file preinstallati:
- Il livello superiore della directory dell'app contiene la licenza del progetto, il
pyproject.toml
file, un file README di esempio in formato ReStructured Text e un.gitignore
file pre-personalizzato con directory comuni da omettere da qualsiasi repository Git creato per il progetto. - La
src
directory contiene il codice sorgente della tua app, con due sottodirectory: una che contiene l'app (ha lo stesso nome della directory del tuo progetto) e una che contiene i metadati dell'app. - La directory dell'app contiene una
resources
directory, che viene utilizzata per archiviare risorse come le icone delle applicazioni.
Briefcase comandi di progetto
Il briefcase
comando è il modo in cui esegui la maggior parte delle tue interazioni con un progetto Briefcase. Abbiamo coperto il new
comando sopra, che viene utilizzato per impostare un progetto Briefcase in una determinata cartella. Ma in genere è necessario utilizzare molti altri comandi durante il ciclo di vita di un'app Briefcase e alcuni di essi possono essere un po 'controintuitivi.
Di seguito sono riportati i comandi Briefcase più comuni che utilizzerai:
dev
: Quando sei all'interno di una directory dell'app, questo comando esegue l'app in modalità dev . La modalità Dev consente di eseguire l'applicazione con il suo complemento completo di librerie installate, ma senza bisogno di essere formalmente impacchettato per la consegna. La maggior parte delle volte, durante lo sviluppo dell'applicazione, la testerai con la modalità sviluppatore. Se le dipendenze sono cambiate dall'ultima volta che è stato eseguitodev
, utilizzare il-d
flag per aggiornarle.build
: Crea una copia dell'applicazione nella forma necessaria per comprimerla per la distribuzione. Questo differisce dal fattodev
che puoi costruire per piattaforme diverse se è installato il ponteggio.update
: Aggiorna una build dell'applicazione. Questo è il modo rapido per assicurarti che la build della tua applicazione abbia il codice più recente, invece di usarebuild
, che rigenera molti più file. Passa il-d
flag per aggiornare le dipendenze e il-r
flag per aggiornare le risorse (ovvero per copiare le risorse dalla versione dev della tua app alla versione build).run
: Esegue la versione incorporata dell'app. Questo essenzialmente simula l'esecuzione della versione pacchettizzata e distribuita dell'applicazione. Passa il-u
flag per aggiornare qualsiasi codice prima di eseguire.package
: Crea un pacchetto di installazione dell'applicazione dalla versione compilata dell'app. Il risultato finale di questo è un artefatto che puoi dare ad altri per installare il tuo programma, ad esempio un .MSI su Windows.
Di seguito sono riportati alcuni dei comandi Briefcase meno comunemente utilizzati:
create
: Da non confondere connew
,create
crea lo scaffolding per un programma di installazione dell'applicazione, un modo per creare il programma di installazione dell'app per una particolare piattaforma. Quando configuri un'app connew
, viene fornita con impalcature per la piattaforma su cui stai lavorando;create
ti consente di aggiungere scaffolding per un'altra piattaforma, se necessario.upgrade
: Aggiorna i componenti utilizzati per creare il pacchetto dell'app, come il framework Wix.publish
: Pubblica l'app in pacchetto su un canale di pubblicazione come un app store. (Al momento della stesura di questo articolo, questa funzione non funziona ancora.)
Per riassumere, questo è l'ordine in cui useresti i comandi Briefcase nel tipico ciclo di vita dell'app:
new
per creare l'appdev
per eseguire l'app mentre ci lavoribuild
per creare una versione dell'app da impacchettare per la distribuzionerun
per testare la versione in pacchetto dell'appupdate
per mantenere la versione pacchettizzata dell'app aggiornata con le modifiche al codicepackage
per distribuire la versione pacchettizzata dell'app con un programma di installazione
Creazione di app valigetta
Creare un programma Python come app Briefcase è molto simile alla creazione di qualsiasi altra app Python. Le questioni principali riguardano la struttura del progetto. Il punto di ingresso dell'app si trova __main__.py
nella directory dell'app, che viene caricata app.py
dalla stessa directory ed eseguita main()
. Quando si inizializza un progetto, verrà popolato con versioni segnaposto di alcuni file di progetto, che è possibile creare o sostituire secondo necessità.
Se stai trasformando un progetto esistente per utilizzare Briefcase, assicurati di strutturarlo in modo tale che il suo punto di ingresso sia quello che si aspetta Briefcase. Ad esempio, se non hai memorizzato il codice in una src
directory, dovrai spostare il codice src
e correggere eventuali incompatibilità nei suoi percorsi e nelle strutture delle directory.
L'altra cosa da tenere a mente è come gestire le dipendenze di terze parti. Il pyproject.toml
file nella directory del progetto controlla quali dipendenze aggiungere al progetto. Se il tuo progetto ha un nome myproject
, pyproject.toml
conterrà una sezione denominata [tool.briefcase.app.myproject]
, con una requires
riga che elenca ogni requisito così come sarebbe specificato in un requirements.txt
file. Se il tuo progetto richiede, ad esempio, regex
e black
, dovresti impostare quella riga su requires = ["regex","black"]
. Dovresti quindi utilizzare briefcase dev -d
per aggiornare le dipendenze per la versione di sviluppo del progetto e briefcase update -d
per aggiornare le dipendenze nella versione pacchettizzata.
Confezione e consegna della valigetta
Una volta eseguito briefcase package
, vedrai apparire un ridistribuibile per il tuo programma in una sottodirectory della directory del progetto che corrisponde alla piattaforma per cui hai costruito. Per Microsoft Windows, ad esempio, la directory sarà windows
e il ridistribuibile sarà un .msi
file con lo stesso nome del progetto. Per Android e iOS, i risultati saranno progetti per Gradle e Xcode, rispettivamente, e questi dovranno essere compilati utilizzando questi strumenti per essere distribuiti su quelle piattaforme.
Come fare di più con Python
- Come eseguire Anaconda fianco a fianco con altri Pythons
- Come usare le dataclass Python
- Inizia con async in Python
- Come usare asyncio in Python
- 3 passaggi per una revisione asincrona di Python
- Come utilizzare PyInstaller per creare eseguibili Python
- Tutorial Cython: come velocizzare Python
- Come installare Python in modo intelligente
- Come gestire i progetti Python con Poetry
- Come gestire progetti Python con Pipenv
- Virtualenv e venv: spiegazione degli ambienti virtuali Python
- Python virtualenv e venv cosa fare e cosa non fare
- Spiegazione del threading e dei sottoprocessi di Python
- Come utilizzare il debugger Python
- Come usare timeit per profilare il codice Python
- Come usare cProfile per profilare il codice Python
- Come convertire Python in JavaScript (e viceversa)