![](/img/trans.png)
[英]renv::restore() error: failed to retrieve 'package' (using private package)
[英]Use renv for private GitLab package
我有一个本地 GitLab 帐户和一个 R package 可以通过以下方式安装:
devtools::install_git(
url = "http://my-gitlab/my-projects/package",
credentials = git2r::cred_user_pass("user", "pass")
)
当我运行renv::init()
时,package 源是未知的。 入门文章确实提供了有关如何设置函数以处理私有存储库的详细信息,但在使用devtools
和git2r::cred_user_pass
。 我可以将GIT_USER
和GIT_PASSWORD
存储在.Renviron
文件中,但我不确定如何使用这些凭据将init
function 强制用户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
一起使用?
当我运行 renv::init() 时,package 源是未知的。
renv
根据其DESCRIPTION
文件推断包的源,该文件(对于自定义遥控器)通常由安装 function 本身进行事后注释。 我怀疑install_git()
没有以 renv 预期的方式之一注释renv
,因此renv
无法推断 package 源。
您可以尝试通过检查DESCRIPTION
文件来确认这一点; 例如,转储其内容的快速方法是:
writeLines(readLines(system.file("DESCRIPTION", package = <package>)))
并检查诸如RemoteType: git
之类的字段,以查看 package 源是否确实已被注释。
对于它的价值,它看起来像devtools::install_git()
委托给remotes::install_git()
,并且可以通过remotes.git_credentials
选项设置默认的 Git 凭据。 例如:
options(remotes.git_credentials = git2r::cred_user_pass("user", "pass"))
但最终, renv
依赖于使用私有访问令牌(通过 GitLab 的GITLAB_PAT
环境变量访问)来对私有存储库进行身份验证。
您是否能够使用设置了 GITLAB_PAT 的renv::install()
成功安装GITLAB_PAT
? 例如:
Sys.setenv(GITLAB_PAT = <...>)
renv::install("gitlab::user/project")
这是我推荐的工作流程,并且开箱即用的remotes
/ devtools
包也应该支持。
对于其他有同样问题的人,这对我有用(见这里):
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")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.