教學 3 - 分發包裝

到目前為止,我們一直在``開發人員模式``下運行我們的應用程式。這使我們可以輕鬆地在本地運行我們的應用程式 - 但我們真正想要的是能夠將我們的應用程式提供給其他人。

但是,我們不想教導使用者如何安裝 Python、建立虛擬環境、複製 git 儲存庫以及在開發人員模式下執行 Briefcase。我們寧願只給他們一個安裝程序,然後讓應用程式正常工作。

公文包可用於打包您的應用程式以透過這種方式進行分發。

創建您的應用程式支架

由於這是我們第一次打包應用程序,因此我們需要創建一些配置文件和其他腳手架來支援打包過程。從``helloworld``目錄中,運行:

(beeware-venv) $ briefcase create

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

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

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

[helloworld] Installing requirements...
...

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

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

[helloworld] Created build/helloworld/macos/app

您可能剛剛在終端機中看到了內容頁面……那麼剛剛發生了什麼?公事包做了以下事情:

  1. 它**生成了一個應用程式模板**。建立本機安裝程式需要大量檔案和配置,超出了實際應用程式的程式碼。對於同一平台上的每個應用程式來說,這個額外的腳手架幾乎都是相同的,除了正在構建的實際應用程式的名稱之外- 因此,Briefcase 為其支援的每個平台提供了一個應用程式模板。此步驟將推出模板,根據需要替換應用程式的名稱、捆綁 ID 和設定檔的其他屬性,以支援您正在建置的平台。

    如果您對公文包提供的範本不滿意,您可以提供自己的範本。但是,在使用公文包的預設範本有更多經驗之前,您可能不想這樣做。

  2. 它**下載並安裝了支援包**。公事包採用的打包方法最好被描述為``可能有效的最簡單的方法``——它提供了一個完整的、獨立的 Python 解釋器,作為它構建的每個應用程式的一部分。這在空間效率方面稍顯低下 - 如果您有 5 個使用 Briefcase 打包的應用程序,那麼您將擁有 5 個 Python 解釋器副本。然而,這種方法保證每個應用程式都是完全獨立的,使用已知可與該應用程式配合使用的特定 Python 版本。

    同樣,Briefcase 為每個平台提供了預設的支援包;如果需要,您可以提供自己的支援包,並將該包包含在建置過程中。如果您需要啟用 Python 解釋器中的特定選項,或者想要從標準庫中刪除執行時間不需要的模組,您可能需要執行此操作。

    公文包維護支援包的本機緩存,因此一旦您下載了特定的支援包,該快取的副本將在未來的版本中使用。

    As noted above, when Briefcase packages an app as a native Linux system package (the default package format for Linux), a support package is not included with the app. Instead, the app will use the Python that is provided by the distribution of Linux being targeted.

  3. 它**安裝了應用程式要求**。您的應用程式可以指定運行時所需的任何第三方模組。這些將使用``pip``安裝到應用程式的安裝程式中。

  4. 它**安裝了您的應用程式代碼**。您的應用程式將擁有自己的程式碼和資源(例如,運行時所需的映像);這些檔案被複製到安裝程式中。

  5. 安裝了應用程式所需的資源。 最後,它添加了安裝程式本身所需的任何其他資源。這包括需要附加到最終應用程式的圖示和啟動螢幕圖像等內容。

完成後,如果您查看專案目錄,您現在應該會看到與您的平台(macOSlinux``或``windows)相對應的目錄,其中包含其他檔案。這是您的應用程式的特定於平台的打包配置。

建立您的應用程式

現在您可以編譯您的應用程式。此步驟執行應用程式在目標平台上可執行所需的任何二進位編譯。

(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

在 macOS 上,build 命令不需要 編譯 任何內容,但它確實需要對二進位內容進行簽名,以便可以執行。此簽名是 臨時 簽名 - 它僅適用於 您的 機器;如果您想將應用程式分發給其他人,則需要提供完整的簽名。

運行您的應用程式

現在您可以使用 Briefcase 來運行您的應用程式:

(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
---------------------------------------------------------------------------

這將開始使用``build``命令的輸出來執行您的本機應用程式。

您可能會注意到應用程式運行時的外觀存在一些細微的差異。例如,作業系統顯示的圖示和名稱可能與您在開發人員模式下運行時看到的圖示略有不同。這也是因為您正在使用打包的應用程序,而不僅僅是運行 Python 程式碼。從作業系統的角度來看,您現在運行的是``應用程式``,而不是``Python 程式``,這反映在應用程式的顯示方式上。

建立您的安裝程式

現在,您可以使用``package``命令打包您的應用程式以進行分發。 package 命令執行將鷹架專案轉換為最終的可分發產品所需的任何編譯。根據平台的不同,這可能涉及編譯安裝程式、執行程式碼簽署或執行其他預分發任務。

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

[helloworld] Signing app...

*************************************************************************
** WARNING: Signing with an ad-hoc identity                            **
*************************************************************************

    This app is being signed with an ad-hoc identity. The resulting
    app will run on this computer, but will not run on anyone else's
    computer.

    To generate an app that can be distributed to others, you must
    obtain an application distribution certificate from Apple, and
    select the developer identity associated with that certificate
    when running 'briefcase package'.

*************************************************************************

Signing app with ad-hoc identity...
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 00:07

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

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

dist 資料夾將包含一個名為``Hello World-0.0.1.dmg`` 的檔案。如果您在 Finder 中找到此文件,然後雙擊其圖標,您將安裝 DMG,為您提供 Hello World 應用程式的副本以及指向您的應用程式資料夾的鏈接,以便於安裝。將應用程式檔案拖曳到應用程式中,您就已經安裝了應用程式。將 DMG 檔案發送給朋友,他們應該能夠執行相同的操作。

在此範例中,我們使用了``–adhoc-sign``選項 - 也就是說,我們使用 ad hoc 憑證簽署我們的應用程式 - 只能在您的電腦上使用的臨時憑證。我們這樣做是為了讓教程簡單。設定程式碼簽署身分有點繁瑣,並且只有在您打算將應用程式分發給其他人時才``需要``它們。如果我們要發布真實的應用程式供其他人使用,我們需要指定真實的憑證。

當您準備好發布實際應用程式時,請查看有關``設定 macOS 代碼簽署身分``的公文包操作指南 <https://briefcase.readthedocs.io/en/latest/how-to/code-signing /macOS. html>`__

下一步

現在,我們已將應用程式打包以便在桌面平台上分發。但是當我們需要更新應用程式中的程式碼時會發生什麼?我們如何將這些更新添加到打包的應用程式中?請參閱 教程 4 以了解…