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

部署Python版AWS Lambda遇导入错误:无法导入is_unprintable

解决AWS Lambda中charset-normalizer的is_unprintable导入错误

问题根源

这个导入错误的核心原因是依赖包架构不兼容:本地(x86_64架构的桌面系统)安装的charset-normalizer包,和AWS Lambda运行的架构(arm64/Graviton2或x86_64)不匹配,导致包内代码结构出现差异;另外charset-normalizer 2.0.12版本与Lambda的Python 3.9环境存在兼容性问题。

解决方案

1. 匹配Lambda架构打包

Lambda运行环境的架构必须与依赖包的编译/安装架构一致,推荐用Docker模拟Lambda环境打包:

  • 拉取对应架构的Lambda Python 3.9镜像:
    # arm64架构(Graviton2)
    docker pull public.ecr.aws/lambda/python:3.9-arm64
    # x86_64架构
    docker pull public.ecr.aws/lambda/python:3.9
    
  • 运行容器并挂载项目目录:
    docker run -v $(pwd):/var/task public.ecr.aws/lambda/python:3.9-arm64 bash
    
  • 在容器内创建虚拟环境并安装依赖:
    python3.9 -m venv venv
    source venv/bin/activate
    pip install --upgrade pip
    pip install -r requirements.txt
    
  • 打包依赖与项目代码:
    # 先打包站点包
    cd venv/lib/python3.9/site-packages/
    zip -r9 /var/task/function.zip .
    # 再添加项目代码
    cd /var/task
    zip -g function.zip api/ core/
    

2. 调整charset-normalizer版本

修改requirements.txt,指定与Python 3.9兼容的稳定版本:

charset-normalizer==2.1.0
aiohttp
bs4

重新执行打包流程即可。

3. 校验打包脚本

确保scripts/package.sh中虚拟环境用Python 3.9创建,避免版本混用:

# 替换脚本内的虚拟环境初始化部分
python3.9 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

打包时确认所有依赖文件都被正确加入zip包,无遗漏。

验证步骤

解压生成的function.zip,检查charset_normalizer/utils.py文件中是否存在is_unprintable函数,若不存在则说明依赖包未正确安装,需重新打包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:07:53