本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将包发布到 Amazon S3 conda 频道
您可以将 conda 包发布到亚马逊简单存储服务 (Amazon S3) 存储桶,这样 AWS Deadline Cloud(Deadline Cloud)工作人员就可以安装它们来运行作业。该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-buildpixi global install rattler-build -
git — 克隆示例存储库所必需的。在Windows,git f
or Windows 还提供了一个 bash外壳,这是一些Windows示例配方所需要的。 -
亚马逊 S3 存储桶 — 用作 conda 通道的亚马逊 S3 存储桶。您可以使用 Deadline Cloud 场中的任务附件存储桶,也可以创建单独的存储桶。
-
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 频道
与s3://目标rattler-build publish一起使用,将包发布到您的 Amazon S3 conda 频道。如果存储桶中不存在该频道,则会自动rattler-build初始化该频道。在开始之前,请确保您已完成先决条件。
以下示例发布了 Deadline Cloud
注意
大型应用程序可能需要数十 GB 的可用磁盘空间来存放源存档、提取的文件和生成输出。请确保使用具有足够可用空间的磁盘,用于软件包生成输出。
将包发布到 Amazon S3 频道
-
克隆截止日期云示例存储库。
git clone https://github.com/aws-deadline/deadline-cloud-samples.git -
切换到
conda_recipes目录。cd deadline-cloud-samples/conda_recipes -
运行如下命令。将
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发布包时,如果频道尚不存在,则该命令会自动初始化该频道。在大多数情况下,您无需手动初始化频道或重新索引频道。
在以下情况下,您可能需要手动初始化频道或重新索引频道:
-
例如,您希望在发布任何包之前创建一个空频道,以验证您的 Deadline Cloud 队列环境是否可以连接到该频道。
-
您直接使用 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 --bucketamzn-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 渠道安装软件包。
测试软件包
-
创建临时测试目录并使用 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 -
将软件包添加到项目中。
pixi add blender=4.5 -
验证软件包是否正常运行。
pixi run blender --version该
pixi run命令激活项目目录的 conda 环境,并在其中运行指定的命令。环境保留在项目目录中,因此您可以从其他终端使用相同的 pixi run命令。
从频道中移除软件包
避免从用于生产的渠道中删除软件包,因为锁文件通过哈希引用特定的软件包。删除软件包会阻止从这些锁文件中重新创建环境。对于开发和测试频道,您可以移除特定软件包,方法是从存储桶中删除该.conda文件,然后重新索引该频道。
删除包文件,然后重新索引频道。将 amzn-s3-demo-bucket替换为存储桶名称。
aws s3 rm s3://amzn-s3-demo-bucket/Conda/Default/linux-64/blender-4.5.0-hb0f4dca_1.conda
删除文件后,重新索引频道以更新频道元数据。有关说明,请参阅为频道重新编制索引。
Package 文件存储在平台特定的子目录中linux-64,例如、win-64或。osx-arm64要列出子目录中的软件包,请运行以下命令。
aws s3 ls s3://amzn-s3-demo-bucket/Conda/Default/linux-64/
清理
测试完成后,移除测试项目目录。
清理测试资源
-
移除测试项目目录。
在 Linux and 上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命令为运行该命令的工作站的操作系统生成软件包。如果您的 Deadline Cloud 队列使用的操作系统与您的工作站不同,或者您的软件包有其他主机要求,则您可以选择以下选项:
-
rattler-build publish在与目标操作系统匹配的主机上运行。例如,使用Linux正在运行的亚马逊弹性计算云 (Amazon EC2) 实例为Linux队列构建软件包。 -
使用 Deadline Cloud 软件包生成队列在目标平台上自动构建。请参见创建包生成队列。
-
(高级)使用交叉编译为不同于工作站的不同平台构建软件包。有关更多信息,请参阅 rattler-build 文档中的交叉编译
。
后续步骤
将包发布到 Amazon S3 conda 频道后,将您的 Deadline Cloud 队列配置为使用该频道:
-
为自定义 conda 包配置生产队列权限 — 向您的生产队列授予对 Amazon S3 conda 频道的只读访问权限。
-
向队列环境添加 conda 通道-配置队列环境以安装来自 Amazon S3 conda 通道的软件包。