部署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
相关产品推荐
相关产品推荐

