Elastic Beanstalk部署Django时psycopg2模块加载失败
Elastic Beanstalk部署Django报psycopg2模块找不到的修复方案
核心问题点
.ebextensions/01_packages.config存在语法错误:02_postgres_install配置键后多了乱码字符ßßß,会导致整个配置文件解析失效,后续的PostgreSQL安装逻辑完全不执行- 部署流程顺序冲突:Elastic Beanstalk的执行顺序是先安装yum声明的系统包、再执行commands块命令、最后安装pip依赖。你当前配置先在yum块装了系统默认低版本的
postgresql-devel,后面才通过commands启用PostgreSQL14源重装开发库,等于pip编译安装psycopg2的时候,系统里的PG开发库版本不匹配,编译安装直接失败 - 依赖冲突:
requirements.txt里同时声明了psycopg2(源码编译版)和psycopg2-binary(预编译二进制版),两个包同时安装会产生导入冲突,直接导致模块加载失败
具体修复操作
1. 修正ebextensions配置
修改.ebextensions/01_packages.config为以下内容,删掉错误乱码,移除yum块里提前安装postgresql-devel的逻辑,保证先启用PostgreSQL14源再安装对应版本的开发库:
packages: yum: git: [] libjpeg-turbo-devel: [] amazon-linux-extras: [] commands: 01_postgres_activate: command: sudo amazon-linux-extras enable postgresql14 02_postgres_install: command: sudo yum install -y postgresql-devel
2. 清理依赖冲突
编辑requirements.txt,删掉psycopg2==2.9.3和psycopg2-binary==2.9.3其中一行。生产环境在Amazon Linux 2上直接保留psycopg2-binary==2.9.3即可,不需要本地编译,稳定性更高。
如果必须使用源码编译版的psycopg2,就删掉psycopg2-binary那行,两个包绝对不能同时存在。
3. 清理缓存重新部署
Elastic Beanstalk会缓存历史部署的虚拟环境依赖,改完配置后不要直接增量发布,优先选择重建环境:在EB控制台选中对应环境,点击「操作」-「重建环境」,彻底清除旧实例上的错误依赖缓存,避免增量部署的缓存问题影响修复效果。
验证方式
部署完成后通过eb ssh连接到实例,执行以下命令验证模块是否正常加载:
# 进入项目虚拟环境 source /var/app/venv/*/bin/activate # 验证psycopg2导入 python -c "import psycopg2; print(psycopg2.__version__)"
命令正常输出版本号即代表修复完成,Gunicorn worker启动时不会再报模块找不到的错误。
内容的提问来源于stack exchange,提问作者OfSorts
相关产品推荐
相关产品推荐

