将 renv 用于私有 GitLab 包
Use renv for private GitLab package
我有一个带有 R 包的本地 GitLab 帐户,可以通过以下方式安装:
devtools::install_git(
url = "http://my-gitlab/my-projects/package",
credentials = git2r::cred_user_pass("user", "pass")
)
当我运行 renv::init()
包来源未知。 getting started article 确实提供了有关如何设置函数来处理私有存储库的详细信息,但在使用 devtools
和 git2r::cred_user_pass
时我无法为 GitLab 弄清楚。我可以将 GIT_USER
和 GIT_PASSWORD
存储在 .Renviron
文件中,但我不确定如何使用这些凭据将 init
函数强制用于用户 devtools::install_git
。我确实尝试过,但后来出现错误:
fatal: could not read Username for 'http://my-gitlab': No such device or address
他们提供的所有示例选项都使用 GitLab 令牌进行身份验证:
# use a named list directly
options(renv.auth = list(
MyPackage = list(GITHUB_PAT = "<pat>")
))
也许有更好的方法可以从本地 GitLab 存储库进行安装,这样可以更好地与 renv
一起使用?
When I run renv::init() the package source is unknown.
renv
根据其 DESCRIPTION
文件推断包的来源,该文件(对于自定义遥控器)通常由安装函数本身注释 post-hoc。我怀疑 install_git()
没有以 renv
预期的方式之一注释包,因此 renv
无法推断包源。
您可以通过检查 DESCRIPTION
文件来尝试确认这一点;例如转储其内容的快速方法是:
writeLines(readLines(system.file("DESCRIPTION", package = <package>)))
并检查 RemoteType: git
之类的字段以查看包源是否确实已被注释。
就其价值而言,它看起来像 devtools::install_git()
委托给 remotes::install_git()
,并且可以通过 remotes.git_credentials
选项设置默认 Git 凭据。例如:
options(remotes.git_credentials = git2r::cred_user_pass("user", "pass"))
最终,renv
依赖于使用私有访问令牌(通过 GitLab 的 GITLAB_PAT
环境变量访问),以便对私有存储库进行身份验证。
您能否使用 renv::install()
并设置 GITLAB_PAT
成功安装软件包?例如:
Sys.setenv(GITLAB_PAT = <...>)
renv::install("gitlab::user/project")
这是我推荐的工作流程,开箱即用的 remotes
/ devtools
包也应该支持。
对于遇到同样问题的其他人,这对我有用(参见 here):
- 在 GITLAB 中创建一个 PAT,确保将 SCOPE 设置为
api
。注意:我不确定这一定是 'api' 我没有检查所有选项,但它对我有用
- 使用
Sys.setenv(GITLAB_PAT = <...>)
将 PAT 设置为环境变量
- 使用
options(renv.config.gitlab.host = "http://my-gitlab-server")
将 gitlab 主机服务器设置为一个选项。注意:我必须包含“http://”才能使其正常工作。
- 运行
renv::install("gitlab::project/package")
- 这对我不起作用:
renv::install("gitlab@my-gitlab-server::project/package")
我有一个带有 R 包的本地 GitLab 帐户,可以通过以下方式安装:
devtools::install_git(
url = "http://my-gitlab/my-projects/package",
credentials = git2r::cred_user_pass("user", "pass")
)
当我运行 renv::init()
包来源未知。 getting started article 确实提供了有关如何设置函数来处理私有存储库的详细信息,但在使用 devtools
和 git2r::cred_user_pass
时我无法为 GitLab 弄清楚。我可以将 GIT_USER
和 GIT_PASSWORD
存储在 .Renviron
文件中,但我不确定如何使用这些凭据将 init
函数强制用于用户 devtools::install_git
。我确实尝试过,但后来出现错误:
fatal: could not read Username for 'http://my-gitlab': No such device or address
他们提供的所有示例选项都使用 GitLab 令牌进行身份验证:
# use a named list directly
options(renv.auth = list(
MyPackage = list(GITHUB_PAT = "<pat>")
))
也许有更好的方法可以从本地 GitLab 存储库进行安装,这样可以更好地与 renv
一起使用?
When I run renv::init() the package source is unknown.
renv
根据其 DESCRIPTION
文件推断包的来源,该文件(对于自定义遥控器)通常由安装函数本身注释 post-hoc。我怀疑 install_git()
没有以 renv
预期的方式之一注释包,因此 renv
无法推断包源。
您可以通过检查 DESCRIPTION
文件来尝试确认这一点;例如转储其内容的快速方法是:
writeLines(readLines(system.file("DESCRIPTION", package = <package>)))
并检查 RemoteType: git
之类的字段以查看包源是否确实已被注释。
就其价值而言,它看起来像 devtools::install_git()
委托给 remotes::install_git()
,并且可以通过 remotes.git_credentials
选项设置默认 Git 凭据。例如:
options(remotes.git_credentials = git2r::cred_user_pass("user", "pass"))
最终,renv
依赖于使用私有访问令牌(通过 GitLab 的 GITLAB_PAT
环境变量访问),以便对私有存储库进行身份验证。
您能否使用 renv::install()
并设置 GITLAB_PAT
成功安装软件包?例如:
Sys.setenv(GITLAB_PAT = <...>)
renv::install("gitlab::user/project")
这是我推荐的工作流程,开箱即用的 remotes
/ devtools
包也应该支持。
对于遇到同样问题的其他人,这对我有用(参见 here):
- 在 GITLAB 中创建一个 PAT,确保将 SCOPE 设置为
api
。注意:我不确定这一定是 'api' 我没有检查所有选项,但它对我有用 - 使用
Sys.setenv(GITLAB_PAT = <...>)
将 PAT 设置为环境变量
- 使用
options(renv.config.gitlab.host = "http://my-gitlab-server")
将 gitlab 主机服务器设置为一个选项。注意:我必须包含“http://”才能使其正常工作。 - 运行
renv::install("gitlab::project/package")
- 这对我不起作用:
renv::install("gitlab@my-gitlab-server::project/package")