使用 skeleton CRAN 构建 R 软件包#

概述#

本教程介绍如何在 macOS 上为已在 CRAN 上提供的 R 模块快速构建 R 语言软件包。

您将构建一个简单的软件包,该软件包可以安装在与您的根环境具有相同 R 版本的任何 conda 环境中。本教程还将告诉您如何在构建软件包时构建可能出现的依赖项。

本教程适合哪些人?#

本教程适用于希望从 CRAN 构建 R 语言软件包的 macOS 用户。无需事先了解 conda-build 或 conda 配方。

开始之前#

在开始之前,请查看先决条件

使用 conda skeleton CRAN 构建简单的软件包#

conda skeleton 命令获取 CRAN 软件包元数据并准备 conda-build 配方。最后一步是构建软件包本身并将其安装到您的 conda 环境中。

为 CRAN 上托管的任何 R 软件包构建 skeleton 配方都很容易。在本节中,您将使用 conda skeleton 生成 conda 配方,该配方告知 conda-build 源文件所在的位置以及如何构建和安装软件包。

您将使用 CRAN 上托管的名为 fansi 的软件包,该工具用于处理 ANSI 文本格式控制序列的效果。

首先,在您的用户主目录中,运行 conda skeleton 命令

conda skeleton cran fansi

conda skeleton 的两个参数是托管位置的类型,在本例中为 cran,以及软件包的名称。

这将创建一个名为 r-fansi 的目录,并在该目录中创建 1 个 skeleton 文件:meta.yaml。根据需要,可以在此处添加许多其他文件,例如 build.shbld.bat、测试脚本或构建软件所需的任何其他内容。使用 ls 命令验证是否已创建此文件。meta.yaml 文件已使用来自 CRAN 元数据的信息填充,在许多情况下不需要编辑。

包含 meta.yaml 的文件夹中的文件统称为“conda-build 配方”

  • meta.yaml---包含配方中的所有元数据。软件包名称和软件包版本部分是必需的---其他所有内容都是可选的。

  • bld.bat---用于构建软件包的 Windows 命令。

  • build.sh---用于构建软件包的 macOS 和 Linux 命令。

现在您已经准备好了 conda-build 配方,可以使用 conda-build 创建软件包

conda-build r-fansi

当 conda-build 完成时,它会显示 conda 软件包的确切路径和文件名。如果 conda-build 命令失败,请参阅故障排除示例问题。如果您在 macOS 上收到 SDK 错误,请查看我们的 macOS 和 SDK 资源

示例文件路径

/Users/jsmith/anaconda3/conda-bld/osx-64/r-fansi-0.4.0-r353h46e59ec_0.tar.bz2

注意

您的路径和文件名将因您的安装和操作系统而异。保存路径和文件名信息以供下一步使用。

现在,您可以使用 use-local 标志在您的 conda 环境中安装新构建的软件包

conda install --use-local r-fansi

现在验证 fansi 是否安装成功

conda list

滚动列表,直到找到 r-fansi

请注意,fansi 来自本地 conda-build 频道。

(base) 0561:~ jsmith$ conda list
# packages in environment at /Users/Jsmith/anaconda3:
# Name                    Version                   Build  Channel
qtpy                      1.5.0                    py37_0
r-base                    3.5.1                h539fb6c_1
r-fansi                   0.4.0            r353h46e59ec_0    local

R 的版本将是您在基本环境中拥有的版本。

请参阅可选---为不同的 R 版本构建以设置您自己的 R 版本。

至此,您现在拥有了一个 fansi 的 conda 软件包,可以安装在其 R 版本的任何 conda 环境中。

构建具有依赖项的 R 软件包#

fansi 软件包是一个简单的软件包,没有依赖项。要构建具有依赖项的 R 软件包,让我们看一下 janitor 的示例。Janitor 是 CRAN 上托管的软件包,用于检查和清理数据。

要开始构建它,请输入

conda skeleton cran janitor

这将创建一个名为 r-janitor 的目录,并在该目录中创建一个 skeleton 文件:meta.yaml。根据需要,可以在此处添加许多其他文件,例如 build.shbld.bat、测试脚本或构建软件所需的任何其他内容。使用 ls 命令验证是否已创建此文件。meta.yaml 文件已使用来自 CRAN 元数据的信息填充,在许多情况下不需要编辑。

现在您已经准备好了 conda-build 配方,可以使用 conda-build 创建软件包

conda-build r-janitor

此时可能会发生的情况是,您将拥有此软件包的依赖项,但这些依赖项尚不存在作为 conda 软件包。它们需要转换为 conda 软件包。使用 conda skeleton 递归地为它依赖的软件包构建配方

conda skeleton cran janitor --recursive

您可以通过键入以下内容手动单独构建每个软件包

conda-build package-name

注意

将“package-name”替换为每个软件包的名称。

一旦所有软件包依赖项都已解决,您可以使用以下命令构建 R 软件包

conda-build .

现在,您可以使用 use-local 标志在您的 conda 环境中安装新构建的软件包

conda install --use-local r-janitor

其余的可选部分向您展示如何为其他 R 版本和其他架构制作 R 软件包,以及如何将它们上传到您的 Anaconda.org 帐户。

可选---为不同的 R 版本构建#

默认情况下,conda-build 为根环境中安装的 R 版本创建软件包。要为其他版本的 R 构建软件包,请使用 --R 标志,后跟版本。

例如,要显式构建 R 3.6.1 版本的 fansi 软件包,请使用

conda-build --R 3.6.1 r-fansi

请注意,conda-build 输出末尾打印的文件已更改,以反映请求的 R 版本。Conda install 将在软件包目录中查找与您当前 R 版本匹配的文件。

示例文件路径

/Users/jsmith/anaconda3/conda-bld/osx-64/r-fansi-0.4.0-r353h46e59ec_0.tar.bz2

注意

您的路径和文件名将因您的安装和操作系统而异。保存路径和文件名信息以供下一个任务使用。

可选---将软件包上传到 Anaconda.org#

Anaconda.org 是公共或私有软件包的存储库。上传到 Anaconda.org 使您可以轻松地在任何环境中使用 conda install 命令安装软件包,而无需手动复制或移动 tarball 文件从一个位置到另一个位置。您可以选择公开或私有您的文件。

有关 Anaconda.org 的更多信息,请参阅 Anaconda.org 文档

  1. 创建一个免费的 Anaconda.org 帐户并记录您的新 Anaconda.org 用户名和密码。

  2. 运行 conda install anaconda-client 并输入您的 Anaconda.org 用户名和密码。

  3. 使用命令 anaconda login 从您的终端登录到您的 Anaconda.org 帐户。

现在您可以将新的本地软件包上传到 Anaconda.org。

anaconda upload /Users/jsmith/anaconda3/conda-bld/osx-64/r-fansi-0.4.0-r353h46e59ec_0.tar.bz2

注意

将您的路径和文件名更改为您在可选---为不同的 R 版本构建中保存的确切路径和文件名。您的路径和文件名将因您的安装和操作系统而异。如果您为多个 R 版本创建了软件包,则必须使用 anaconda upload 命令上传每个软件包。

提示

如果您想始终自动将成功的构建上传到 Anaconda.org,请运行:conda config --set anaconda_upload yes

您可以使用以下命令注销您的 Anaconda.org 帐户

anaconda logout

更多信息#

有关更多选项,请参阅完整的conda skeleton 命令文档