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

Docker容器中使用R的reticulate调用Python失败问题排查

问题

我基于rocker/shinyverse:4.2.2构建Docker镜像,Dockerfile内容如下:

# File: Dockerfile
FROM rocker/shiny-verse:4.2.2

RUN echo "apt-get start"
RUN apt-get update && apt-get install -y \
python3 \
python3-pip 

# install R packages
RUN R -e "install.packages('remotes')"
RUN R -e "install.packages('reticulate')"
RUN R -e "install.packages('tidyverse')"

# Install Python packages datetime and zeep
RUN python3 -m pip install datetime zeep

# Set the environment variable to use Python3
ENV RETICULATE_PYTHON /usr/bin/python3

我编写了如下简单R脚本:

library("tidyverse")
library(reticulate)

# Call a simple Python command to calculate 3*5
py_run_string("z = 3+4")
py$z %>% print()

启动容器后,执行命令:

docker exec shiny_new Rscript /home/shiny/ETL/reticulate_test.R

但出现错误:

Error: Python shared library not found, Python bindings not loaded.
Use reticulate::install_miniconda() if you'd like to install a Miniconda Python environment.
Execution halted

不清楚如何正确配置Python以在R脚本中通过reticulate调用Python,请问Docker镜像配置哪里出错了?

解决方法
  • 问题根源:仅安装python3和python3-pip不足以让reticulate正常工作,缺少Python共享库文件——reticulate依赖该库实现R与Python的交互。在Debian/Ubuntu系镜像中,Python共享库包含在python3-dev包内。
  • 修正步骤:
    1. 修改Dockerfile,在apt-get install的依赖列表中添加python3-dev:
      RUN apt-get update && apt-get install -y \
      python3 \
      python3-pip \
      python3-dev
      
    2. 额外优化:datetime是Python标准库,无需通过pip安装,可移除该安装项,精简依赖:
      RUN python3 -m pip install zeep
      
    3. 重新构建镜像并启动容器:
      docker build -t shiny_new .
      docker run -d --name shiny_new shiny_new
      
    4. 再次执行测试脚本,reticulate即可正常调用Python。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:06:12