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

本地运行正常但sam local invoke容器中numpy C扩展导入失败求助

解决AWS SAM Local Invoke Python 3.9环境下的依赖适配问题

核心问题定位

本地Python 3.9环境下依赖组合运行正常,但sam local invoke容器中失败,本质是容器默认环境缺少系统级编译依赖,或依赖包的跨平台适配问题,尤其是sktime、scipy这类需要底层编译的库。

解决方案步骤

  • 自定义SAM构建镜像,补充系统依赖
    SAM默认的Python 3.9构建镜像缺少scipy、sktime编译所需的系统库,可创建自定义Docker镜像:

    FROM public.ecr.aws/sam/build-python3.9:latest
    RUN yum install -y gcc gcc-c++ openblas-devel lapack-devel
    

    构建自定义镜像后,在SAM构建时指定:

    sam build --build-image your-custom-python39-image-name
    
  • 预下载平台特定wheel包,避免源码编译
    直接用pip安装会拉取源码在容器中编译,容易失败。提前下载适配Linux x86_64+Python3.9的wheel包:

    pip download --platform manylinux2014_x86_64 --python-version 39 --only-binary=:all: -r requirements.txt -d ./wheels
    

    修改requirements.txt指向本地wheel目录:

    --find-links=./wheels
    numpy==1.21.0
    pandas
    sktime
    scipy
    scikit-learn
    

    这样SAM构建时会优先使用预编译的wheel,跳过耗时且易失败的源码编译环节。

  • 制作sktime专属Lambda层,搭配官方pandas层

    1. 创建层目录结构:sktime-layer/python/lib/python3.9/site-packages/
    2. 在Python3.9虚拟环境中安装依赖到该目录:
      pip install sktime numpy==1.21.0 scipy scikit-learn -t sktime-layer/python/lib/python3.9/site-packages/ --no-cache-dir
      
    3. 压缩sktime-layer下的python目录为zip包(注意不要有外层文件夹),若体积接近250M,可通过strip命令剥离二进制文件的调试信息缩小体积:
      find sktime-layer/python/lib/python3.9/site-packages -name "*.so" -exec strip {} \;
      
    4. 在SAM模板中同时引用自定义sktime层和AWS官方pandas层,避免依赖冲突。
  • 调试容器内的依赖状态
    运行sam local invoke时开启调试日志,定位具体报错:

    sam local invoke --debug
    

    或直接进入构建后的容器手动排查:

    docker run -it --entrypoint /bin/bash <sam-build-image-id>
    

    在容器内执行pip list核对包版本,或直接运行测试脚本定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:30:57