AWS Lambda函数无法找到Psycopg2包问题求助
解决AWS Lambda中
No module named psycopg2的问题 你遇到的核心问题是本地编译的psycopg2和Lambda运行环境不兼容——你在macOS上编译的psycopg2依赖的是苹果系统的底层库,而Lambda运行在Amazon Linux(或Amazon Linux 2)环境下,系统架构和依赖库完全不同,所以上传后无法识别这个模块。下面给你两个实用的解决办法:
方法一:用预编译的psycopg2-binary(快速搞定)
这是最省心的方案,适合绝大多数场景:
- 先确认你本地使用的Python版本,和Lambda配置的运行时版本完全一致(比如Lambda用Python 3.9,你本地就用3.9)
- 创建一个临时文件夹,把你的
lambda_insertEmailAddress.py放进去 - 在该文件夹下执行命令,安装适配Lambda环境的psycopg2:
pip install psycopg2-binary -t . - 安装完成后,把
lambda_insertEmailAddress.py和生成的psycopg2文件夹一起打包成zip(注意别把你的postgresql-9.4.3文件夹加进去,Lambda根本不需要这个) - 重新上传这个zip包到Lambda即可
方法二:在Amazon Linux环境下编译(自定义需求场景)
如果你的项目需要自定义编译psycopg2,可以用Docker模拟Lambda的运行环境来操作:
- 先拉取Amazon Linux 2镜像:
docker pull amazonlinux:2 - 启动容器并挂载你的项目目录(把
/path/to/your/project换成你本地项目的实际路径):docker run -v /path/to/your/project:/app -it amazonlinux:2 - 在容器内安装编译所需的依赖:
yum install -y python3-devel postgresql-devel gcc - 切换到挂载的项目目录,安装psycopg2:
cd /app pip3 install psycopg2 -t . - 退出容器,把本地生成的
psycopg2文件夹和你的lambda_insertEmailAddress.py打包,上传到Lambda
额外提醒
- 打包时要保证zip的根目录直接包含你的Python文件和
psycopg2文件夹,别嵌套在子目录里 - 完全不需要把
postgresql-9.4.3文件夹打包,Lambda会用自身环境的PostgreSQL依赖 - 一定要确认Lambda的运行时Python版本,和你安装psycopg2时用的Python版本完全匹配
内容的提问来源于stack exchange,提问作者SonOfSeuss
相关产品推荐
相关产品推荐

