使用 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.sh
和 bld.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.sh
和 bld.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 文档。
创建一个免费的 Anaconda.org 帐户,并记录您的新 Anaconda.org 用户名和密码。
运行
conda install anaconda-client
并输入您的 Anaconda.org 用户名和密码。使用命令
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 命令文档。