Tutoriel 3 - Emballage pour la distribution#

Jusqu’à présent, nous avons exécuté notre application en « mode développeur ». Cela nous permet d’exécuter facilement notre application localement - mais ce que nous voulons vraiment, c’est pouvoir donner notre application à d’autres personnes.

Cependant, nous ne voulons pas avoir à apprendre à nos utilisateurs comment installer Python, créer un environnement virtuel, cloner un dépôt git, et lancer Briefcase en mode développeur. Nous préférons leur donner un programme d’installation et faire en sorte que l’application fonctionne tout simplement.

Briefcase peut être utilisé pour empaqueter votre application afin de la distribuer de cette manière.

Création de l’échafaudage de l’application#

Puisque c’est la première fois que nous empaquetons notre application, nous devons créer quelques fichiers de configuration et autres échafaudages pour supporter le processus d’empaquetage. Depuis le répertoire helloworld, exécutez :

(beeware-venv) $ briefcase create

[helloworld] Generating application template...
Using app template: https://github.com/beeware/briefcase-macOS-app-template.git, branch v0.3.14
...

[helloworld] Installing support package...
...

[helloworld] Installing application code...
Installing src/helloworld... done

[helloworld] Installing requirements...
...

[helloworld] Installing application resources...
...

[helloworld] Removing unneeded app content...
...

[helloworld] Created build/helloworld/macos/app

Vous venez probablement de voir défiler des pages de contenu dans votre terminal… que s’est-il passé ? Briefcase a fait ce qui suit :

  1. Il génère un modèle d’application. Il y a beaucoup de fichiers et de configurations nécessaires pour construire un installateur natif, en plus du code de votre application réelle. Cet échafaudage supplémentaire est presque le même pour chaque application sur la même plateforme, à l’exception du nom de l’application réelle en cours de construction - Briefcase fournit donc un modèle d’application pour chaque plateforme qu’il supporte. Cette étape déploie le modèle, en substituant le nom de votre application, l’ID du bundle, et d’autres propriétés de votre fichier de configuration comme requis pour supporter la plateforme sur laquelle vous construisez.

    Si vous n’êtes pas satisfait du modèle fourni par Briefcase, vous pouvez créer votre propre modèle. Cependant, vous ne voudrez probablement pas faire cela avant d’avoir un peu plus d’expérience dans l’utilisation du modèle par défaut de Briefcase.

  2. Il télécharge et installe un paquetage de support. L’approche d’empaquetage adoptée par Briefcase est décrite comme « la chose la plus simple qui puisse fonctionner » - elle fournit un interpréteur Python complet et isolé dans le cadre de chaque application qu’elle construit. Cette approche est légèrement inefficace en termes d’espace - si vous avez 5 applications empaquetées avec Briefcase, vous aurez 5 copies de l’interpréteur Python. Cependant, cette approche garantit que chaque application est complètement indépendante, utilisant une version spécifique de Python connue pour fonctionner avec l’application.

    Encore une fois, Briefcase fournit un paquetage de support par défaut pour chaque plateforme ; si vous le souhaitez, vous pouvez fournir votre propre paquetage de support, et faire en sorte que ce paquetage soit inclus dans le processus de construction. Vous pouvez faire cela si vous avez des options particulières dans l’interpréteur Python que vous devez activer, ou si vous voulez retirer de la bibliothèque standard les modules dont vous n’avez pas besoin au moment de l’exécution.

    Briefcase maintient un cache local des paquets de support, de sorte qu’une fois que vous avez téléchargé un paquet de support spécifique, cette copie en cache sera utilisée dans les futures versions.

  3. Il installe les exigences de l’application. Votre application peut spécifier tous les modules tiers qui sont nécessaires à l’exécution. Ceux-ci seront installés en utilisant pip dans l’installeur de votre application.

  4. Il installe le code de votre application. Votre application aura son propre code et ses propres ressources (par exemple, les images nécessaires à l’exécution) ; ces fichiers sont copiés dans le programme d’installation.

  5. Il installe les ressources nécessaires à votre application. Enfin, il ajoute toutes les ressources supplémentaires nécessaires à l’installateur lui-même. Cela inclut des choses comme les icônes qui doivent être attachées à l’application finale et les images de l’écran d’accueil.

Une fois cette opération terminée, si vous regardez dans le répertoire du projet, vous devriez voir un répertoire correspondant à votre plateforme (macOS, linux, ou windows) qui contient des fichiers supplémentaires. C’est la configuration de l’empaquetage spécifique à la plate-forme pour votre application.

Construire votre application#

Vous pouvez maintenant compiler votre application. Cette étape permet d’effectuer toute compilation binaire nécessaire pour que votre application soit exécutable sur votre plate-forme cible.

(beeware-venv) $ briefcase build

[helloworld] Adhoc signing app...
...
Signing build/helloworld/macos/app/Hello World.app
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 00:07

[helloworld] Built build/helloworld/macos/app/Hello World.app

Sous macOS, la commande build n’a pas besoin de compiler quoi que ce soit, mais elle doit signer le contenu du binaire pour qu’il puisse être exécuté. Cette signature est une signature ad hoc - elle ne fonctionnera que sur votre machine ; si vous voulez distribuer l’application à d’autres, vous devrez fournir une signature complète.

Exécution de l’application#

Vous pouvez maintenant utiliser Briefcase pour exécuter votre application :

(beeware-venv) $ briefcase run

[helloworld] Starting app...
===========================================================================
Configuring isolated Python...
Pre-initializing Python runtime...
PythonHome: /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/support/python-stdlib
PYTHONPATH:
- /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/support/python311.zip
- /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/support/python-stdlib
- /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/support/python-stdlib/lib-dynload
- /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/app_packages
- /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/app
Configure argc/argv...
Initializing Python runtime...
Installing Python NSLog handler...
Running app module: helloworld
---------------------------------------------------------------------------

Ceci lancera l’exécution de votre application native, en utilisant la sortie de la commande build.

Il se peut que vous remarquiez de petites différences dans l’apparence de votre application lorsqu’elle est en cours d’exécution. Par exemple, les icônes et le nom affichés par le système d’exploitation peuvent être légèrement différents de ceux que vous avez vus lors de l’exécution en mode développeur. Cela s’explique également par le fait que vous utilisez l’application packagée et que vous ne vous contentez pas d’exécuter du code Python. Du point de vue du système d’exploitation, vous exécutez maintenant « une application » et non « un programme Python », ce qui se reflète dans l’apparence de l’application.

Construction du programme d’installation#

Vous pouvez maintenant empaqueter votre application pour la distribuer, en utilisant la commande package. La commande package effectue toutes les compilations nécessaires pour convertir le projet d’échafaudage en un produit final distribuable. Selon la plateforme, cela peut impliquer la compilation d’un installateur, la signature du code, ou d’autres tâches de pré-distribution.

(beeware-venv) $ briefcase package --adhoc-sign

[helloworld] Signing app with adhoc identity...
...
Signing build/helloworld/macos/app/Hello World.app
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 00:07

[helloworld] Building DMG...
Signing dist/Hello World-0.0.1.dmg

[helloworld] Packaged dist/Hello World-0.0.1.dmg

Le dossier dist contiendra un fichier nommé Hello World-0.0.1.dmg. Si vous localisez ce fichier dans le Finder, et que vous double-cliquez sur son icône, vous monterez le DMG, ce qui vous donnera une copie de l’application Hello World, et un lien vers votre dossier Applications pour faciliter l’installation. Faites glisser le fichier de l’application dans Applications, et vous aurez installé votre application. Envoyez le fichier DMG à un ami, qui devrait pouvoir faire de même.

Dans cet exemple, nous avons utilisé l’option --adhoc-sign - c’est-à-dire que nous signons notre application avec des informations d’identification ad hoc - des informations d’identification temporaires qui ne fonctionneront que sur votre machine. Nous avons fait cela pour que le tutoriel reste simple. La mise en place d’identités de signature de code est un peu fastidieuse, et elles ne sont nécessaires que si vous avez l’intention de distribuer votre application à d’autres personnes. Si nous publiions une application réelle pour que d’autres puissent l’utiliser, nous devrions spécifier de vraies informations d’identification.

Lorsque vous êtes prêt à publier une application réelle, consultez le guide Briefcase How-To sur Setting up a macOS code signing identity

Étapes suivantes#

Notre application est désormais prête à être distribuée sur les plates-formes de bureau. Mais que se passe-t-il lorsque nous devons mettre à jour le code de notre application ? Comment intégrer ces mises à jour dans notre application packagée ? Consultez Tutoriel 4 pour le découvrir…