本地Python脚本运行正常,部署AWS Lambda后出现AttributeError报错求助
解决Lambda Python 3.12中
os.add_dll_directory不存在的AttributeError问题 问题根源
os.add_dll_directory是Windows平台专属的Python标准库方法,Linux/macOS环境下的Python没有这个属性。你的依赖包(openpyxl/snowflake.connector间接依赖的numpy)如果是在Windows本地打包的,会带上Windows特有的numpy初始化逻辑,部署到基于Linux的AWS Lambda环境后,numpy初始化时调用该方法就会触发错误。
解决方案
1. 使用Linux环境打包依赖(最可靠)
AWS Lambda的Python运行环境基于Amazon Linux 2023,直接在Linux环境打包能避免跨平台依赖问题:
- 用Docker模拟Lambda官方环境执行依赖安装:
# 拉取Lambda Python 3.12镜像,挂载当前目录,安装依赖到指定路径 docker run -v "$PWD":/var/task public.ecr.aws/lambda/python:3.12 /bin/sh -c "pip install openpyxl snowflake-connector-python -t ./package" - 将本地脚本和
package目录下的所有文件一起压缩成zip包,上传到Lambda即可。
2. 指定跨平台兼容的依赖版本并打包
如果只能在Windows打包,可通过指定manylinux平台参数强制拉取Linux兼容的二进制包:
pip install openpyxl snowflake-connector-python numpy==1.26.4 --platform manylinux2014_x86_64 --only-binary=:all: -t ./package
- 降级numpy到稳定的跨平台版本(如1.26.4),避免新版本中Windows特有的初始化逻辑。
- 打包完成后,删除package目录下所有
.dll、.pyd等Windows专属文件(可选,但更稳妥)。
3. 检查Lambda运行时配置
确认Lambda的运行时确实选择了Python 3.12,避免因运行时版本不匹配导致的隐性问题。
内容的提问来源于stack exchange,提问作者user68288
相关产品推荐
相关产品推荐

