使用 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.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 命令文档。