

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为应用程序或插件创建 conda 软件包
<a name="conda-package"></a>

conda 软件包是用任何语言编写的软件的压缩档案。Conda 支持各种操作系统和架构组合，因此您可以将完整的应用程序（如BlenderMaya、和）与 Python 和其他语言的库Nuke一起打包。有关 conda 软件包的更多信息，请参阅 conda 文档中的[软件包](https://docs.conda.io/projects/conda/en/latest/user-guide/concepts/packages.html)。

要使用 conda 软件包，您需要将其安装到虚拟环境中。conda 虚拟环境有一个安装软件包*的前缀目录*。安装软件包时会使用硬链接或文件重新链接（如果支持），因此使用相同的软件包创建多个环境不会占用大量额外的磁盘空间。要使用虚拟环境，请将其激活以设置环境变量。激活运行软件包提供的脚本，使每个软件包都有机会修改 PATH 或其他环境变量。Conda 包通常包含应用程序或库，但灵活的激活意味着它们也可以指向安装在共享文件系统上的应用程序。

制作自定义软件包涉及三个阶段：*配方*包含构建说明，*软件包*是构建的工件（`.conda`或`.tar.bz2`文件），*频道*托管要安装的软件包。该`rattler-build publish`命令可以处理所有三个步骤——它可以将配方构建到包中并发布到频道，也可以直接使用包工件来发布它。

[conda-forge](https://conda-forge.org/) 社区维护着各种开源软件的软件包配方，并在频道中托管软件包工件。`conda-forge`您可以将队列配置`conda-forge`为包源，然后构建依赖于 conda-forge 软件包运行的自定义包。对于Linux，conda-forge 托管了一个完整的编译器工具链，包括 CUDA 支持，并选择了一致的编译和链接选项。你可以在自己的配方中使用 conda-forge 包作为依赖项，也可以将它们与自定义软件包一起安装在同一个环境中。

您可以将整个应用程序（包括依赖关系）组合成一个 conda 包。[Deadline Cloud 在截止日期云频道](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/create-queue-environment.html#conda-queue-environment)中为服务管理的车队提供的软件包使用这种二进制重新打包方法。这会组织与安装文件相同的文件，以适合 conda 虚拟环境。

**注意**  
大型应用程序可能需要数十 GB 的可用磁盘空间来存放源存档、提取的文件和生成输出。请确保使用具有足够可用空间的磁盘，用于软件包生成输出。

## Package 打包应用程序
<a name="conda-package-application"></a>

在为 conda 重新打包应用程序时，有两个目标：
+ 应用程序的大多数文件应与主要 conda 虚拟环境结构分开。然后，环境可以将应用程序与来自其他来源（例如 [conda-](https://conda-forge.org/) forge）的软件包混合在一起。
+ 激活 conda 虚拟环境后，应该可以从 PATH 环境变量中访问该应用程序。

**为 conda 重新打包应用程序**

1. 编写 conda 构建配方，将应用程序安装到类似的子目录中。`$CONDA_PREFIX/opt/<application-name>`这会将其与标准前缀目录（如`bin`和`lib`）区分开来。

1. 向添加符号链接或启动脚本`$CONDA_PREFIX/bin`以运行应用程序二进制文件。

   或者，创建 activate.d 脚本，该`conda activate`命令将运行该脚本以将应用程序的二进制目录添加到 PATH 中。如果在Windows任何可以创建环境的地方都不支持符号链接，请改用应用程序启动或 activate.d 脚本。

1. 某些应用程序依赖于 Deadline Cloud 服务管理的队列上默认未安装的库。例如，对于非交互式作业，通常不需要 X11 窗口系统，但有些应用程序仍然要求它在没有图形界面的情况下运行。您必须在创建的包中提供这些依赖关系。

1. 如果应用程序支持插件，请提供一个明确的约定，即插件包在虚拟环境中与应用程序集成时应遵循该约定。例如，[Maya2026 年的示例配方](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/conda_recipes/maya-2026#instructions-for-maya-plugin-packages)记录了Maya插件的这一惯例。

1. 确保您遵守所打包的应用程序的版权和许可协议。我们建议使用私有 Amazon S3 存储桶作为您的 conda 频道，以控制分发并限制对服务器场的包访问权限。

该`deadline-cloud`频道中套餐的示例配方可在上的 De [adline Cloud 示例](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/conda_recipes#readme)存储库中找到GitHub。

## Package 一个插件
<a name="conda-package-plugins"></a>

应用程序插件可以打包成自己的 conda 包。创建插件包时，请遵循以下准则：
+ 将主机应用程序包作为构建依赖项和运行依赖项包含在构建配方中`recipe.yaml`。使用版本限制，这样编译配方只能与兼容的软件包一起安装。
+ 按照主机应用程序包约定注册插件。

## 适配器套装
<a name="conda-package-adaptors"></a>

某些 Deadline Cloud 应用程序集成使用*适配器*来扩展应用程序界面，以简化[作业模板的编写](building-jobs.md)。适配器是一个命令行界面，支持运行后台守护程序、报告状态和应用路径映射。有关更多信息，请参阅上的 Ope [n Job Description Adaptor 运行时](https://github.com/OpenJobDescription/openjd-adaptor-runtime-for-python#readme)。GitHub例如，[deadline-cloud-for-maya](https://github.com/aws-deadline/deadline-cloud-for-maya/)on GitHub 包括集成的作业提交 GUI 和一个Maya适配器，该适配器可在服务管理的队列中作为`maya-openjd`软件包使用。

Deadline Cloud 提交者提交的作业 GUIs 包括一个`CondaPackages`参数值，该参数值指定要包含在虚拟环境中以运行作业的 conda 包。的`CondaPackages`参数值Maya通常看起来像`maya=2025.* maya-openjd=0.15.* maya-mtoa`，可能包含插件包的替代条目。当队列环境设置用于运行作业的 conda 虚拟环境时，它会解析这些软件包名称和版本限制以使其兼容，并添加它们运行所需的所有依赖包。每个适配器和插件包都指定了与之兼容的内容，包括哪些版本Maya、Python 的版本以及其他依赖项。

[要使用我们的示例（例如 [maya-openjd 配方）构建自己的适配器包GitHub，您可以在 conda-](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/conda_recipes/maya-openjd) forge 提供的 Python 包和其他依赖项的基础上构建。](https://conda-forge.org/)您可能需要先确定[截止日期](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/conda_recipes/deadline)和[openjd-adaptor-runtime](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/conda_recipes/openjd-adaptor-runtime)配方以满足依赖关系。