You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:45:37