迁移Python代码至AWS Lambda遇'rpds.rpds'导入错误求助
解决AWS Lambda中导入rpds.rpds失败的问题
可能原因及解决步骤
1. 层的依赖包结构错误
Lambda要求层的压缩包必须遵循固定目录结构:python/lib/python<版本号>/site-packages/,所有依赖包要放在这个路径下。如果你的压缩包直接把依赖文件堆在根目录,Lambda根本找不到。
- 检查结构:解压层的zip包,必须能看到
python文件夹,里面层层嵌套到site-packages,rpds、pycsvschema等依赖都要在这个目录里。 - 重新打包:
- 本地创建对应版本的目录,比如用Python 3.9的话,建
python/lib/python3.9/site-packages/ - 用pip把依赖安装到这个路径:
pip install pycsvschema -t python/lib/python3.9/site-packages/ --platform manylinux2014_x86_64 --only-binary=:all: - 进入包含
python文件夹的目录,把整个python文件夹压缩成zip(不要压缩里面的文件,要把python作为根目录),再上传为Lambda层。
- 本地创建对应版本的目录,比如用Python 3.9的话,建
2. 依赖包的平台不兼容
本地安装的rpds可能是针对Mac/Windows编译的二进制包,而Lambda用的是Linux环境,导致二进制文件无法运行。
- 用pip指定Linux平台安装:上面的打包命令里的
--platform manylinux2014_x86_64就是强制安装Linux兼容的二进制包。 - 或者直接在Linux环境(比如Docker拉取Lambda官方镜像、EC2实例)里安装依赖再打包,这样能彻底避免平台问题。
3. Python版本不匹配
如果Lambda函数用的是Python 3.10,但层里的依赖是装在Python 3.9的路径下,Lambda会找不到对应版本的依赖。
- 确认Lambda函数的运行时版本(控制台函数配置里能看),打包层时把依赖放到对应版本的site-packages路径里。
- 比如函数用3.10,路径就改成
python/lib/python3.10/site-packages/。
4. 层未关联到Lambda函数
别光部署层,要把层添加到你的CSV校验器函数里。
- 进入Lambda函数的配置页,找到“层”选项,检查是否已经添加了目标层。没加的话点击“添加层”选择你的层,保存配置。
5. rpds包安装不完整
有时候pip安装会漏掉rpds的核心二进制文件,或者打包时没包含进去。
- 解压层的zip包,检查
python/lib/python<版本号>/site-packages/rpds目录下,是否有类似rpds.cpython-39-x86_64-linux-gnu.so的二进制文件。如果没有,重新执行pip安装命令,确保rpds完整安装,再重新打包。
内容的提问来源于stack exchange,提问作者Carmen Navarro
相关产品推荐
相关产品推荐

