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

通过Bootstrap Actions在EMR安装Python包,Jupyter Notebook无法正常加载

EMR 6.3.1 Jupyter Notebook 依赖版本不匹配问题解决方案

问题核心分析

EMR 6.3.1 的 Jupyter Notebook 默认使用隔离虚拟环境(/emr/notebook-env),该环境预安装了 pandas 1.2.3 等包;而你的 Bootstrap 脚本是将依赖安装到了系统级 Python 路径(/usr/local/lib64/python3.7/site-packages)。由于 Notebook 的 sys.path 优先级高于系统路径,导致始终加载旧版本依赖,且无法找到系统路径下的 pyarrow。

可行解决方案

方案一:直接安装到 Notebook 隔离环境(推荐)

修改 Bootstrap 脚本,使用 Notebook 环境自带的 pip 执行安装,确保依赖直接进入 emr/notebook-env:

#!/bin/bash
# 调用Notebook环境的pip安装指定版本依赖
sudo /emr/notebook-env/bin/pip install Cython==0.29.4 boto==2.49.0 boto3==1.18.50 numpy==1.19.5 pandas==1.3.2 pyarrow==5.0.0

方案二:修改 Jupyter 配置,提升系统路径优先级

通过配置让 Notebook 优先加载系统路径下的依赖:

  1. SSH 登录 EMR 主节点,切换到 emr-notebook 用户:
    sudo su emr-notebook
    
  2. 生成并编辑 Jupyter 配置文件:
    jupyter notebook --generate-config
    vi ~/.jupyter/jupyter_notebook_config.py
    
  3. 在配置文件末尾添加以下内容,将系统路径插入到 sys.path 首位:
    c.InteractiveShellApp.exec_lines = [
        'import sys; sys.path.insert(0, "/usr/local/lib64/python3.7/site-packages")'
    ]
    
  4. 重启 Jupyter 服务:
    sudo systemctl restart jupyter-server
    

方案三:Notebook 内临时调整路径(适合快速测试)

每次打开 Notebook 后先执行以下代码,强制优先加载系统路径的依赖:

import sys
import importlib

# 将系统路径插入到sys.path最前面
sys.path.insert(0, "/usr/local/lib64/python3.7/site-packages")

# 重新导入并刷新pandas
import pandas
importlib.reload(pandas)

print(pandas.__version__)  # 应显示1.3.2
import pyarrow  # 可正常导入

补充说明

之前尝试的方法无效原因:

  • --user 参数:依赖安装到用户目录(/home/emr-notebook/.local/lib/python3.7/site-packages),优先级仍低于 emr/notebook-env
  • 设置 PYTHONPATH 后安装:Bootstrap 阶段的环境变量不会传递给 Jupyter 的运行环境
  • pyspark 内核:该内核使用 Spark 独立的 Python 环境,与 Jupyter Notebook 的隔离环境无关联

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:10:44