Empacotamento de Beeware: preparando aplicativos Python para distribuição

Até agora, operamos nosso aplicativo no “ Modo desenvolvedor “, o que nos permitiu executá-lo facilmente em nosso próprio sistema.

No entanto, nosso objetivo final é poder distribuir nosso aplicativo para outros usuários. No entanto, não queremos sobrecarregar nossos usuários com instruções sobre como instalar o Python , estabelecer um ambiente virtual, clonar um repositório git e executar o Briefcase no modo de desenvolvedor.

Em vez disso, preferimos fornecer a eles um instalador que permite que o aplicativo funcione perfeitamente sem a necessidade de etapas adicionais.

Você pode utilizar o Briefcase para empacotar seu aplicativo e distribuí-lo da seguinte maneira.



Crie seu scaffold de aplicativo

Como esta é sua tentativa inicial de empacotar seu aplicativo , você deve estabelecer certos arquivos de configuração e outros andaimes para facilitar o processo de empacotamento.

Para fazer isso, execute o seguinte comando no diretório helloworld :

Mac OS

(beeware-mrxenv) $ briefcase create

[helloworld] Generating application template...
Using app template: https://github.com/beeware/briefcase-macOS-app-template.git, branch v0.3.12
...
[helloworld] Installing support package...
...
[helloworld] Installing application code...
...
[helloworld] Installing requirements...
...
[helloworld] Installing application resources...
...
[helloworld] Removing unneeded app content...
...
[helloworld] Created build/helloworld/macos/app

Linux

(beeware-mrxenv) $ briefcase create

[helloworld] Finalizing application configuration...
Targeting ubuntu:jammy (Vendor base debian)
Determining glibc version... done

Targeting glibc 2.35
Targeting Python3.10

[helloworld] Generating application template...
Using app template: https://github.com/beeware/briefcase-linux-AppImage-template.git, branch v0.3.12
...
[helloworld] Installing support package...
...
[helloworld] Building Docker container image...
...
[helloworld] Installing application code...
...
[helloworld] Installing requirements...
...
[helloworld] Entering Docker context...
...
[helloworld] Leaving Docker context...
Building wheels for app requirements... done

[helloworld] Entering Docker context...
...
[helloworld] Leaving Docker context...
Installing app requirements... done

[helloworld] Installing application resources...
...
[helloworld] Removing unneeded app content...
...
[helloworld] Created build/helloworld/linux/ubuntu

janelas

(beeware-mrxenv) C:\...>briefcase create

[helloworld] Generating application template...
Using app template: https://github.com/beeware/briefcase-windows-app-template.git, branch 0.3.12
...
[helloworld] Installing support package...
...
[helloworld] Installing application code...
...
[helloworld] Installing requirements...
...
[helloworld] Installing application resources...
...
[helloworld] Created build\helloworld\windows\app

É provável que você tenha observado uma grande quantidade de exibição de conteúdo na tela do seu terminal. Isso leva à pergunta - o que acabou de acontecer? O Porta-arquivos executou as seguintes ações:

  • O Briefcase gerou um modelo de aplicativo para você. Construir um instalador nativo requer vários arquivos e configurações além do código do aplicativo. Este andaime adicional é praticamente idêntico para todos os aplicativos na mesma plataforma, com exceção do nome do aplicativo real que está sendo construído. Para acomodar a plataforma na qual você está desenvolvendo, o Briefcase fornece um modelo de aplicativo para cada plataforma suportada. Nesta etapa, o modelo é implementado substituindo o nome de seu aplicativo, ID do pacote e outras propriedades de seu arquivo de configuração conforme necessário. Se não estiver satisfeito com o modelo fornecido pelo Briefcase, você tem a opção de criar o seu próprio. No entanto, é aconselhável esperar até adquirir um pouco mais de experiência com o modelo padrão do Briefcase.
  • O Briefcase também baixou e instalou um pacote de suporte para você. O método de embalagem empregado pela Briefcase é considerado “a coisa mais simples que poderia funcionar”. Ele inclui um interpretador Python completo e isolado com cada aplicativo que ele constrói. Este método é um pouco ineficiente em termos de uso de espaço. Por exemplo, se você empacotar cinco aplicativos com o Briefcase, terá cinco cópias do interpretador Python. No entanto, essa abordagem garante que cada aplicativo seja totalmente independente, empregando uma versão específica do Python que é verificada para funcionar com o aplicativo. Mais uma vez, o Briefcase oferece um pacote de suporte padrão para cada plataforma. Como alternativa, você pode fornecer seu próprio pacote de suporte, que será incluído no processo de compilação. Você pode querer fazer isso se precisar de opções específicas habilitadas no interpretador Python ou se quiser eliminar módulos desnecessários da biblioteca padrão em tempo de execução. O Briefcase mantém um cache local de pacotes de suporte. Como resultado, depois de baixar um pacote de suporte específico, ele será utilizado em compilações futuras.
  • Ele também instalou os requisitos para seu aplicativo. Você pode indicar quaisquer módulos de terceiros necessários em tempo de execução em seu aplicativo. Esses módulos serão instalados usando pip no instalador do seu aplicativo.
  • Além disso, instalou o código do seu aplicativo. Seu aplicativo provavelmente tem seu próprio código e recursos, como imagens necessárias no tempo de execução. Esses arquivos são duplicados no instalador pelo Briefcase.
  • Por fim, instalou os recursos necessários para o seu aplicativo. Ele também adiciona quaisquer recursos extras exigidos pelo próprio instalador. Por exemplo, os ícones que devem ser anexados ao aplicativo final e as imagens da tela inicial estão incluídos nele.

Após a conclusão do processo acima, você pode verificar o diretório do projeto para encontrar um diretório que corresponda à sua plataforma (macOS, Linux ou Windows). Esse diretório conterá arquivos adicionais, que são a configuração de empacotamento específica da plataforma para seu aplicativo.


Crie seu aplicativo

Neste ponto, você tem a opção de compilar seu aplicativo.

Esta ação concluirá qualquer compilação binária necessária para que seu aplicativo seja executado em sua plataforma de destino.

Mac OS

(beeware-mrxenv) $ 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

Se você estiver usando macOS, o comando build não envolve compilação. No entanto, é necessário assinar o conteúdo binário para permitir a execução. A assinatura aplicada é uma assinatura ad hoc válida apenas em sua máquina. Se você pretende distribuir o aplicativo para outras pessoas, precisará fornecer uma assinatura completa.

Linux

(beeware-mrxenv) $ briefcase build

[helloworld] Finalizing application configuration...
Targeting ubuntu:jammy (Vendor base debian)
Determining glibc version... done

Targeting glibc 2.35
Targeting Python3.10

[helloworld] Building application...
Build bootstrap binary...
make: Entering directory '/home/brutus/beeware-tutorial/helloworld/build/linux/ubuntu/jammy/bootstrap'
...
make: Leaving directory '/home/brutus/beeware-tutorial/helloworld/build/linux/ubuntu/jammy/bootstrap'
Building bootstrap binary... done

Installing license... done

Installing changelog... done

Installing man page... done

Update file permissions...
...
Updating file permissions... done

Stripping binary... done

[helloworld] Built build/helloworld/linux/ubuntu/jammy/helloworld-0.0.1/usr/bin/helloworld

Depois que a etapa anterior for concluída, você encontrará uma pasta helloworld-0.0.1 dentro do diretório de compilação. Esta pasta espelha o sistema de arquivos Linux /usr e contém uma pasta bin com um binário helloworld. Ele também possui pastas lib e share que são necessárias para suportar o binário.

janelas

(beeware-mrxenv) C:\...>briefcase build

Setting stub app details... done

[helloworld] Built build\helloworld\windows\app\src\Toga Test.exe

Ao executar o comando build no Windows, não há necessidade de nenhuma compilação, mas é necessário fornecer alguns metadados ao aplicativo, como nome e versão.


Execute seu aplicativo

Agora, você pode usar o Briefcase para executar seu aplicativo.

Mac OS

(beeware-mrxenv) $ 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
---------------------------------------------------------------------------

Linux

(beeware-mrxenv) $ briefcase run

[helloworld] Finalizing application configuration...
Targeting ubuntu:jammy (Vendor base debian)
Determining glibc version... done

Targeting glibc 2.35
Targeting Python3.10

[helloworld] Starting app...
===========================================================================
Install path: /home/brutus/beeware-tutorial/helloworld/build/helloworld/linux/ubuntu/jammy/helloworld-0.0.1/usr
Pre-initializing Python runtime...
PYTHONPATH:
- /usr/lib/python3.10
- /usr/lib/python3.10/lib-dynload
- /home/brutus/beeware-tutorial/helloworld/build/helloworld/linux/ubuntu/jammy/helloworld-0.0.1/usr/lib/helloworld/app
- /home/brutus/beeware-tutorial/helloworld/build/helloworld/linux/ubuntu/jammy/helloworld-0.0.1/usr/lib/helloworld/app_packages
Configure argc/argv...
Initializing Python runtime...
Running app module: helloworld
---------------------------------------------------------------------------

janelas

(beeware-mrxenv) C:\...>briefcase run

[helloworld] Starting app...

===========================================================================
Log started: 2023-04-18 12:32:01Z
PreInitializing Python runtime...
PythonHome: C:\Users\brutus\beeware-tutorial\helloworld\windows\app\Hello World\src
PYTHONPATH:
- C:\Users\brutus\beeware-tutorial\helloworld\windows\app\Hello World\src\python39.zip
- C:\Users\brutus\beeware-tutorial\helloworld\windows\app\Hello World\src
- C:\Users\brutus\beeware-tutorial\helloworld\windows\app\Hello World\src\app_packages
- C:\Users\brutus\beeware-tutorial\helloworld\windows\app\Hello World\src\app
Configure argc/argv...
Initializing Python runtime...
Running app module: helloworld
---------------------------------------------------------------------------

Ao começar a executar seu aplicativo usando a saída do comando build, você pode observar algumas pequenas alterações na aparência do aplicativo. Isso ocorre porque agora você está usando o aplicativo empacotado em vez de apenas executar o código Python. O sistema operacional o considera como “um app” e não “um programa Python”, o que se reflete na exibição do aplicativo, como os ícones e o nome exibidos pelo sistema operacional.


Crie seu instalador

Agora, você pode agrupar seu aplicativo para distribuição executando o comando package.

Este comando irá lidar com qualquer compilação necessária para transformar o projeto em um produto acabado que pode ser distribuído aos usuários finais.

As tarefas exatas necessárias para cada plataforma podem diferir, como criar um instalador, executar assinatura de código ou realizar outras ações de pré-distribuição.

Mac OS

(beeware-mrxenv) $ 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

Depois de usar o comando package, um arquivo chamado Hello World-0.0.1.dmg será criado na pasta dist. Você pode encontrar este arquivo no Finder, e clicando duas vezes em seu ícone, você pode montar o DMG, que lhe dará uma cópia do aplicativo Hello World e um link para sua pasta Aplicativos, facilitando a instalação. Para instalar seu aplicativo, basta arrastar o arquivo do aplicativo para Aplicativos. Você também pode enviar o arquivo DMG para um amigo, e ele poderá instalar o aplicativo da mesma forma.

No exemplo acima, a opção –adhoc-sign foi usada para assinar o aplicativo com credenciais ad hoc que funcionarão apenas em sua máquina. Isso foi feito para manter o tutorial simples. Se você pretende distribuir seu aplicativo para outras pessoas, precisará configurar identidades de assinatura de código reais, o que pode ser um pouco complicado.

Linux

Se você estiver usando o Briefcase para empacotar seu aplicativo no Linux, a saída do comando package pode variar um pouco, dependendo da distribuição específica que você está usando. Por exemplo, se você estiver usando uma distribuição baseada no Debian, você observará:

(beeware-mrxenv) $ briefcase package

[helloworld] Finalizing application configuration...
Targeting ubuntu:jammy (Vendor base debian)
Determining glibc version... done

Targeting glibc 2.35
Targeting Python3.10

[helloworld] Building .deb package...
Write Debian package control file... done

dpkg-deb: building package 'helloworld' in 'helloworld-0.0.1.deb'.
Building Debian package... done

[helloworld] Packaged dist/helloworld_0.0.1-1~ubuntu-jammy_amd64.deb

Na pasta dist, você encontrará o arquivo DEB que foi criado.

Você observará o seguinte se estiver trabalhando com uma distribuição baseada em RHEL:

(beeware-mrxenv) $ briefcase package

[helloworld] Finalizing application configuration...
Targeting fedora:36 (Vendor base rhel)
Determining glibc version... done

Targeting glibc 2.35
Targeting Python3.10

[helloworld] Building .rpm package...
Generating rpmbuild layout... done

Write RPM spec file... done

Building source archive... done

Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.Kav9H7
+ umask 022
...
+ exit 0
Building RPM package... done

[helloworld] Packaged dist/helloworld-0.0.1-1.fc36.x86_64.rpm

Se você estiver procurando o arquivo RPM que foi gerado, você o encontrará na pasta dist. Observe que apenas algumas distribuições do Linux são atualmente suportadas para empacotamento. Caso você queira criar um pacote para uma distribuição Linux diferente, o Briefcase ainda pode ajudá-lo, mas você precisará instalar o Docker. Você pode encontrar instaladores oficiais para o Docker Engine em várias distribuições Unix. Siga as instruções para sua plataforma específica, mas tome cuidado para não instalar o Docker no modo 'sem raiz'. Depois de instalar o Docker, você poderá iniciar um contêiner do Linux, como:

$ docker run -it ubuntu:22.04

Após a instalação bem-sucedida do Docker, a execução do comando especificado exibirá um prompt Unix (como root@84444e31cff9:/#) em um contêiner Docker do Ubuntu 22.04. Para sair do Docker e retornar ao shell local, basta pressionar Ctrl-D. Com o Docker instalado, você pode usar o Briefcase para gerar um pacote para qualquer uma das distribuições do Linux compatíveis com o Briefcase, fornecendo uma imagem do Docker como argumento. Por exemplo, se você deseja criar um pacote DEB para Ubuntu 22.04 (Jammy), independentemente do seu sistema operacional, você pode executar o seguinte comando:

briefcase package --target ubuntu:jammy

Ao executar esse comando, você fará o download da imagem do Docker para a distribuição do Linux selecionada, configurará um contêiner capaz de executar compilações do Briefcase e criará o pacote do aplicativo nessa imagem. Após a conclusão do processo, você encontrará o pacote para a distribuição Linux pretendida na pasta dist.

janelas

(beeware-mrxenv) C:\...>briefcase create

[helloworld] Building MSI...
...
[helloworld] Packaged dist\Hello_World-0.0.1.msi

Após a conclusão da etapa acima, você encontrará um arquivo chamado Hello_World-0.0.1.msi na pasta dist. Para iniciar o processo de instalação, você pode clicar duas vezes neste instalador, o que solicitará um procedimento de instalação familiar do Windows. Depois que esta instalação for concluída, você terá uma entrada 'Hello World' em seu menu iniciar.


Importância da Embalagem Beeware

Beeware é uma ferramenta importante para empacotar aplicativos Python para distribuição. O empacotamento refere-se ao processo de preparar seu código para distribuição, o que pode envolver o agrupamento com todas as suas dependências e a criação de instaladores para diferentes plataformas.

O uso do Beeware pode ajudar a simplificar o processo de empacotamento, principalmente para desenvolvedores que não estão familiarizados com as nuances do empacotamento de aplicativos Python. A Beeware fornece um conjunto de ferramentas que permite aos desenvolvedores empacotar seu código Python para distribuição como aplicativos independentes que podem ser executados em várias plataformas, incluindo Windows, macOS e Linux.

Empacotar seu aplicativo Python usando o Beeware também pode facilitar a instalação e o uso do aplicativo pelos usuários, pois eles não precisam se preocupar com a instalação e configuração de dependências. Isso pode ajudar a aumentar a adoção e o alcance do seu aplicativo.

Além disso, a Beeware fornece uma abordagem consistente e padronizada para empacotar aplicativos Python, o que pode ajudar a garantir que seu aplicativo seja executado conforme o esperado em diferentes plataformas. Também pode facilitar a manutenção e atualização de seu aplicativo no futuro, pois o empacotamento geralmente é uma tarefa única que pode ser automatizada usando ferramentas como o Beeware.


Conclusão

Você pode considerar o Beeware uma ferramenta valiosa para empacotar seus aplicativos Python para distribuição. O Beeware pode simplificar o processo de empacotamento e ajudá-lo a atingir um público mais amplo, facilitando a instalação e o uso de seus aplicativos pelos usuários. Ao usar o conjunto de ferramentas e a abordagem padronizada de empacotamento da Beeware, você pode garantir que seus aplicativos Python sejam executados de forma consistente em diferentes plataformas, o que pode facilitar sua manutenção e atualização no futuro. Por fim, se você deseja distribuir seus aplicativos Python para um público maior, o Beeware é uma ferramenta importante que você deve considerar usar.

Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone