在shinyapps.io部署含Bitbucket仓库依赖的Shiny应用遇报错求助
Shiny应用部署到shinyapps.io时Bitbucket依赖包安装问题解决
问题场景
开发的Shiny应用依赖多个CRAN包,同时部分依赖包需从Bitbucket公开仓库安装,本地运行正常,但部署到shinyapps.io时触发以下错误:
Error: Unhandled Exception: child_task=1392178012 child_task_status=failed: Error parsing manifest: Unknown repository for package source: bitbucket Execution halted
补充背景:应用核心依赖的rdrop2包已停止维护并从CRAN移除,需通过devtools::install_github("karthik/rdrop2")从GitHub安装,且该包依赖多个需手动安装的assertive系列Bitbucket包。
解决方案
shinyapps.io默认不直接识别Bitbucket源,可通过以下几种方式解决:
方法1:在DESCRIPTION文件中声明非CRAN依赖
shinyapps.io会读取项目DESCRIPTION文件的Remotes字段,自动从指定源安装依赖。在DESCRIPTION中添加以下内容:
Remotes: karthik/rdrop2, bitbucket::richierocks/assertive.properties, bitbucket::richierocks/assertive.types
添加完成后重新部署应用,平台会自动解析Remotes字段,从GitHub和Bitbucket拉取对应包。
方法2:在应用启动脚本中添加条件安装逻辑
在app.R或global.R的开头添加包检查与安装代码,确保部署环境中存在所需依赖:
# 安装Bitbucket依赖包 if (!requireNamespace("assertive.properties", quietly = TRUE)) { remotes::install_bitbucket("richierocks/assertive.properties") } if (!requireNamespace("assertive.types", quietly = TRUE)) { remotes::install_bitbucket("richierocks/assertive.types") } # 安装GitHub上的rdrop2 if (!requireNamespace("rdrop2", quietly = TRUE)) { remotes::install_github("karthik/rdrop2") }
注意:部署前需确保项目中已包含remotes包的依赖声明(可本地安装remotes,或在DESCRIPTION的Imports字段添加remotes)。
方法3:使用renv锁定依赖版本
- 本地用
renv初始化项目:
install.packages("renv") renv::init()
- 安装所有依赖(包括Bitbucket和GitHub包),然后生成锁定文件:
renv::snapshot()
- 将生成的
renv.lock文件和renv目录一同部署到shinyapps.io,平台会根据锁定文件中的源信息自动安装所有依赖。
内容的提问来源于stack exchange,提问作者TheDza
相关产品推荐
相关产品推荐

