使用 skeleton CRAN 构建 R 包#

概述#

本教程介绍如何在 macOS 上快速构建一个 R 语言包,用于已经可以在 CRAN 上获得的 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 源文件在哪里以及如何构建和安装包。

您将使用一个名为 fansi 的包,该包托管在 CRAN 上,是一个工具,用于考虑 ANSI 文本格式控制序列的效果。

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

conda skeleton cran fansi

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

这将创建一个名为 r-fansi 的目录,并在该目录中创建一个 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 命令文档