Zappa部署Django至AWS Lambda遇psycopg2错误及包体积过大求助
解决Zappa部署Django到AWS Lambda的两个问题
一、修复psycopg2模块加载错误
日志里的ImproperlyConfigured: Error loading psycopg2 module: No module named 'psycopg2._psycopg',是因为本地安装的psycopg2/psycopg2-binary和AWS Lambda的Amazon Linux运行环境不兼容,而aws-psycopg2是专门为AWS环境编译的适配版本。
解决步骤:
- 打开
requirements.txt,删除psycopg2==2.9.3和psycopg2-binary==2.9.6这两行,只保留aws-psycopg2==1.3.8 - 重新安装依赖:执行
pip install -r requirements.txt - 检查Django配置文件
settings.py中的数据库引擎,确保是django.db.backends.postgresql_psycopg2,示例:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'your_db_name', 'USER': 'your_db_user', 'PASSWORD': 'your_db_password', 'HOST': 'your_db_host', 'PORT': '5432', } }
- 重新部署项目:
zappa update dev
二、解决部署包体积持续增大的问题
首次部署后包体积逐渐变大,是因为Zappa会缓存构建文件,加上一些不必要的开发依赖、缓存文件被打包进去。
解决步骤:
- 清理Zappa本地缓存:删除项目根目录下的
.zappa文件夹,这个文件夹存储了之前的构建缓存,删除后会重新生成干净的构建文件 - 拆分依赖:把开发环境专用的依赖(比如
flake8)移到单独的dev-requirements.txt,部署时只安装生产依赖 - 扩展Zappa配置的
exclude列表,排除更多不需要打包的内容,修改后的配置示例:
{ "dev": { // 其他原有配置... "exclude": [ ".env", ".git", "__pycache__", "*.pyc", "*.pyo", "tests/", "docs/", "staticfiles/", "media/", ".github/" ] } }
- 启用预编译包:在Zappa配置的
dev节点添加"use_precompiled_packages": true,这个选项会使用Lambda兼容的预编译包,减少冗余编译文件 - 彻底重置部署(可选):如果上述方法效果有限,可以先执行
zappa undeploy dev清空旧的Lambda资源,再重新执行zappa deploy dev
内容的提问来源于stack exchange,提问作者Anna Berezko
相关产品推荐
相关产品推荐

