View a markdown version of this page

將套件發佈至 Amazon S3 conda 頻道 - 截止日期雲端

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將套件發佈至 Amazon S3 conda 頻道

您可以將 conda 套件發佈到 Amazon Simple Storage Service (Amazon S3) 儲存貯體,以便 AWS 截止日期雲端 (截止日期雲端) 工作者可以安裝它們來執行任務。此rattler-build publish命令使用 Amazon S3 的方式與使用本機檔案系統頻道的方式相同。命令可以建置配方並發佈結果,或發佈您已建置的套件檔案。在這兩種情況下, 命令都會將套件上傳至儲存貯體,並在單一步驟中為頻道編製索引。

rattler-build publish 命令 AWS 會使用標準登入資料鏈向 進行身分驗證,因此會像任何 AWS 工具一樣使用您的 AWS 組態。如需設定登入資料的詳細資訊,請參閱《AWS Command Line Interface (AWS CLI) 使用者指南》中的組態和登入資料檔案設定

先決條件

將套件發佈至 Amazon S3 之前,請先完成下列先決條件:

  • pixi 和 rattler-build – 從 pixi.sh 安裝 pixi,然後安裝 rattler-build

    pixi global install rattler-build
  • git – 複製範例儲存庫時需要。在 上Windows,適用於 的 git Windows 也提供 bash shell,其中一些Windows範例配方需要。

  • Amazon S3 儲存貯體 – 用作 conda 頻道的 Amazon S3 儲存貯體。您可以從截止日期雲端陣列使用任務附件儲存貯體,或建立單獨的儲存貯體。

  • AWS 登入資料 – 使用 aws configure命令或 aws login命令在工作站上設定登入資料。如需詳細資訊,請參閱 AWS Command Line Interface 使用者指南中的設定 AWS CLI

  • IAM 許可 – (選用) 若要減少憑證擁有的許可範圍,您可以使用 AWS Identity and Access Management (IAM) 政策,僅授予 Amazon S3 儲存貯體和您使用的頻道字首的下列許可 (例如 /Conda/*):

    • s3:GetObject

    • s3:PutObject

    • s3:DeleteObject

    • s3:ListBucket

    • s3:GetBucketLocation

將套件發佈至 Amazon S3 頻道

使用 rattler-build publish搭配 s3://目標,將套件發佈到您的 Amazon S3 Conda 頻道。如果頻道不存在於儲存貯體中, 會自動rattler-build初始化頻道。開始之前,請確定您已完成先決條件

下列範例會從 上的截止日期雲端範例儲存庫發佈 Blender4.5 範例配方GitHub。 https://github.com/aws-deadline/deadline-cloud-samples您可以取代與範例儲存庫不同的配方,或使用您自己的配方。

注意

大型應用程式可能需要數十 GB 的可用磁碟空間,才能進行來源封存、解壓縮檔案和建置輸出。請確定您使用的磁碟有足夠的可用空間供套件建置輸出使用。

將套件發佈至 Amazon S3 頻道
  1. 複製截止日期雲端範例儲存庫。

    git clone https://github.com/aws-deadline/deadline-cloud-samples.git
  2. 切換至 conda_recipes 目錄。

    cd deadline-cloud-samples/conda_recipes
  3. 執行下列命令。將 amzn-s3-demo-bucket 取代為您的儲存貯體名稱。

    rattler-build publish blender-4.5/recipe/recipe.yaml --to s3://amzn-s3-demo-bucket/Conda/Default --build-number=+1

    /Conda/Default 字首會在儲存貯體中組織頻道。您可以使用不同的字首,但參考頻道的所有命令和佇列組態的字首必須一致。

關於組建編號

--build-number=+1 選項會根據目的地頻道中已存在的內容,自動挑選下一個建置編號。最佳實務是絕不覆寫頻道中的套件。如果套件具有相同的檔案名稱,則一律建置為新的組建編號。當您建置到生產頻道或反映生產的預備頻道時,使用 會--build-number=+1達成此目標。

如果您想要直接控制建置編號,您可以使用 等特定值來設定建置編號--build-number=7。如果您省略 選項, rattler-build會使用 recipe.yaml 檔案中定義的組建編號。

如果您的套件配方取決於來自特定頻道的套件,例如 conda-forge,請將 -c conda-forge新增至 命令。

您也可以發佈已建置的套件檔案,例如來自本機建置.conda的檔案。將 amzn-s3-demo-bucket 取代為您的儲存貯體名稱。

rattler-build publish output/linux-64/blender-4.5.0-hb0f4dca_0.conda \ --to s3://amzn-s3-demo-bucket/Conda/Default

初始化或重新索引頻道

當您使用 rattler-build publish 發佈套件時,如果頻道尚未存在,命令會自動初始化頻道。在大多數情況下,您不需要手動初始化或重新索引頻道。

在下列情況中,您可能需要手動初始化或重新索引頻道:

  • 您想要在發佈任何套件之前建立空白頻道,例如,確認您的截止日期雲端佇列環境可以連線至頻道。

  • 您已使用 Amazon S3 工具直接上傳或刪除.conda檔案,而不是使用 rattler-build publish,且頻道索引已過期。

初始化空白頻道

若要初始化空白頻道,請建立 repodata.json 檔案,並將其上傳至頻道字首的noarch子目錄。將 amzn-s3-demo-bucket 取代為您的儲存貯體名稱。

echo '{"info":{"subdir":"noarch"},"packages":{},"packages.conda":{},"removed":[],"repodata_version":1}' > empty_channel_repodata.json aws s3api put-object --body empty_channel_repodata.json --key Conda/Default/noarch/repodata.json --bucket amzn-s3-demo-bucket

/Conda/Default 字首必須符合佇列環境使用的頻道字首。初始化頻道之後,您可以使用 將套件發佈至頻道rattler-build publish

為頻道重新編製索引

如果頻道索引已過期,請使用 從頻道中的套件檔案rattler-index重建索引。首先,安裝 rattler-index

pixi global install rattler-index

然後重新索引頻道。將 amzn-s3-demo-bucket 取代為您的儲存貯體名稱。

rattler-index s3 s3://amzn-s3-demo-bucket/Conda/Default

測試套件

發佈套件後,請建立臨時 pixi 專案,以驗證套件是否正常運作。專案會從 Amazon S3 頻道安裝套件。

測試套件
  1. 建立暫時測試目錄,並使用 Amazon S3 頻道初始化 pixi 專案。將 amzn-s3-demo-bucket 取代為您的儲存貯體名稱。

    mkdir package-test-env cd package-test-env pixi init --channel s3://amzn-s3-demo-bucket/Conda/Default
  2. 將套件新增至專案。

    pixi add blender=4.5
  3. 驗證套件是否正常運作。

    pixi run blender --version

    pixi run 命令會啟用專案目錄的 conda 環境,並在其中執行指定的命令。環境會保留在專案目錄中,因此您可以從其他終端機使用相同的pixi run命令。

從頻道移除套件

避免從用於生產的頻道中移除套件,因為 lockfiles 會依雜湊參考特定套件。移除套件可防止從這些 lockfile 重新建立環境。對於開發和測試通道,您可以從儲存貯體中刪除.conda檔案,然後重新索引通道,以移除特定套件。

刪除套件檔案,然後重新索引頻道。將 amzn-s3-demo-bucket 取代為您的儲存貯體名稱。

aws s3 rm s3://amzn-s3-demo-bucket/Conda/Default/linux-64/blender-4.5.0-hb0f4dca_1.conda

刪除檔案後,請重新索引頻道以更新頻道中繼資料。如需說明,請參閱為頻道重新編製索引

套件檔案存放在平台特定的子目錄中linux-64,例如 win-64、 或 osx-arm64。若要列出子目錄中的套件,請執行下列命令。

aws s3 ls s3://amzn-s3-demo-bucket/Conda/Default/linux-64/

清除

測試後,移除測試專案目錄。

清除測試資源
  • 移除測試專案目錄。

    在 Linux和 macOS上執行下列命令。

    rm -rf package-test-env

    在 Windows(cmd) 上執行下列命令。

    rmdir /s /q package-test-env

偵錯組建

如果建置失敗, 會rattler-build保留建置目錄,以便您進行調查。執行下列命令,在建置環境中開啟互動式 Shell,並在建置期間設定所有環境變數。

rattler-build debug shell

從偵錯 shell,您可以修改檔案、執行個別建置命令,以及新增相依性來隔離問題。如需詳細資訊,請參閱 rattler-build 文件中的偵錯組建。

為其他平台建置套件

rattler-build publish 命令會為執行命令之工作站的作業系統建置套件。如果您的截止日期雲端機群使用與工作站不同的作業系統,或者您的套件有其他主機需求,則您有下列選項:

  • 在符合目標作業系統的主機rattler-build publish上執行 。例如,使用執行 的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體Linux來建置Linux機群的套件。

  • 使用截止日期雲端套件建置佇列來自動化目標平台上的建置。請參閱建立套件建置佇列

  • (進階) 使用跨編譯為工作站的不同平台建置套件。如需詳細資訊,請參閱 rattler-build 文件中的跨編譯

後續步驟

將套件發佈至 Amazon S3 Conda 頻道後,請將截止日期雲端佇列設定為使用該頻道: