You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku部署时无法安装R及rpy2问题求助

问题:Heroku部署Django+React项目时rpy2安装失败

问题详情

我在搭建基于Django和React的网站时,尝试安装适配rpy2的R buildpack,但部署到Heroku时持续报错。已确认以下配置:

  • Buildpack顺序为Apt、Python、R
  • 根目录存在Aptfile、init.R和runtime.txt文件
  • Aptfile中包含r-base
  • runtime.txt指定了Python版本

试过清除缓存、重新安装buildpack,但仍无法成功安装rpy2,报错信息如下:

报错信息

正在收集 rpy2~=3.5.16 (来自 requirements.txt 第15行)
remote:          正在下载 rpy2-3.5.17.tar.gz (220 kB)
remote:          正在安装构建依赖项:已启动
remote:          正在安装构建依赖项:完成,状态为'done'
remote:          获取构建wheel所需的依赖:已启动
remote:          获取构建wheel所需的依赖:完成,状态为'error'
remote:          error: subprocess-exited-with-error
remote:          
remote:          × 获取构建wheel所需的依赖执行失败
remote:          │ 退出码:1
remote:          ╰─> [34行输出]
remote:              回溯(最近的调用最后):
remote:                文件 "/app/.heroku/python/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", 第353行, in <module>
remote:                  main()
remote:                文件 "/app/.heroku/python/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", 第335行, in main
remote:                  json_out['return_val'] = hook(**hook_input['kwargs'])
remote:                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
remote:                文件 "/app/.heroku/python/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", 第118行, in get_requires_for_build_wheel
remote:                  return hook(config_settings)
remote:                         ^^^^^^^^^^^^^^^^^^^^^
remote:                文件 "/tmp/pip-build-env-jhoy88xq/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", 第334行, in get_requires_for_build_wheel
remote:                  return self._get_build_requires(config_settings, requirements=[])
remote:                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
remote:                文件 "/tmp/pip-build-env-jhoy88xq/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", 第304行, in _get_build_requires
remote:                  self.run_setup()
remote:                文件 "/tmp/pip-build-env-jhoy88xq/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", 第320行, in run_setup
remote:                  exec(code, locals())
remote:                文件 "<string>", 第141行, in <module>
remote:                文件 "<string>", 第110行, in get_r_c_extension_status
remote:                文件 "/tmp/pip-install-a760eb7i/rpy2_c86a8ea1d3504c00a4764017850c8b04/rpy2/situation.py", 第286行, in get_r_flags
remote:                  _get_r_cmd_config(r_home, flags,
remote:                文件 "/tmp/pip-install-a760eb7i/rpy2_c86a8ea1d3504c00a4764017850c8b04/rpy2/situation.py", 第246行, in _get_r_cmd_config
remote:                  output = subprocess.check_output(
remote:                           ^^^^^^^^^^^^^^^^^^^^^^^^
remote:                文件 "/app/.heroku/python/lib/python3.12/subprocess.py", 第466行, in check_output
remote:                  return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
remote:                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
remote:                文件 "/app/.heroku/python/lib/python3.12/subprocess.py", 第548行, in run
remote:                  with Popen(*popenargs, **kwargs) as process:
remote:                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
remote:                文件 "/app/.heroku/python/lib/python3.12/subprocess.py", 第1026行, in __init__
remote:                  self._execute_child(args, executable, preexec_fn, close_fds,
remote:                文件 "/app/.heroku/python/lib/python3.12/subprocess.py", 第1955行, in _execute_child
remote:                  raise child_exception_type(errno_num, err_msg, err_filename)
remote:              FileNotFoundError: [Errno 2] 找不到文件或目录:'/usr/lib/R/bin/R'
remote:              [输出结束]
remote:          
remote:          note: 该错误来自子进程,大概率不是pip的问题
remote:        error: subprocess-exited-with-error
remote:        
remote:        × 获取构建wheel所需的依赖执行失败
remote:        │ 退出码:1
remote:        ╰─> 查看上面的输出获取更多信息
remote:        
remote:        note: 该错误来自子进程,大概率不是pip的问题
remote: 
remote:  !     错误:无法使用pip安装依赖项
remote:  !     
remote:  !     查看上面的日志输出获取更多信息
remote: 
remote:  !     推送被拒绝,Python应用编译失败
remote: 
remote:  !     推送失败
remote: 正在验证部署...
remote: 
remote: !       推送被拒绝至website-name
remote: 
到 https://git.heroku.com/website-name.git
 ! [远程拒绝] main -> main (pre-receive hook declined)
error: 无法推送某些引用至 'https://git.heroku.com/website-name.git'

解决方案

1. 更换适配的R Buildpack

报错核心是找不到/usr/lib/R/bin/R,说明当前R buildpack没有把R安装到预期路径。可以替换为第三方专门适配Heroku的R buildpack,它会将R安装到/app/vendor/R路径,更符合Heroku的环境规范。

2. 显式设置R_HOME环境变量

如果坚持使用当前buildpack,需要在Heroku的环境变量中设置R_HOME为实际的R安装路径。通过Heroku CLI执行:

heroku config:set R_HOME=/app/vendor/R

或在Heroku控制台的“设置”页面手动添加环境变量。

3. 调整Buildpack顺序

rpy2安装时需要R已提前存在,正确的Buildpack顺序应为Apt → R → Python,确保R先安装完成,再执行Python依赖的安装。

4. 扩展Aptfile的依赖

除r-base外,还需添加R的开发依赖,确保rpy2编译时能找到必要的头文件。在Aptfile中补充:

r-base-dev
libcurl4-openssl-dev
libssl-dev
libxml2-dev

5. 指定兼容的版本组合

rpy2 3.5.x对Python 3.12的支持可能存在兼容性问题,建议在runtime.txt中指定Python 3.11版本,同时在requirements.txt中明确rpy2版本为rpy2==3.5.16,避免自动升级到不兼容的版本。


内容的提问来源于stack exchange,提问作者Wisteria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 16:54:53