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

部署Django应用至AWS Elastic Beanstalk遇mysqlclient安装问题

Django部署AWS Elastic Beanstalk时mysqlclient安装失败问题

错误日志

----------------------------------------
/var/log/eb-engine.log
----------------------------------------
  
  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [24 lines of output]
      Trying pkg-config --exists mysqlclient
      Command 'pkg-config --exists mysqlclient' returned non-zero exit status 1.
      Trying pkg-config --exists mariadb
      Command 'pkg-config --exists mariadb' returned non-zero exit status 1.
      Trying pkg-config --exists libmariadb
      Command 'pkg-config --exists libmariadb' returned non-zero exit status 1.
      Traceback (most recent call last):
        File "/var/app/venv/staging-LQM1lest/lib64/python3.8/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 363, in <module>
          main()
        File "/var/app/venv/staging-LQM1lest/lib64/python3.8/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 345, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
        File "/var/app/venv/staging-LQM1lest/lib64/python3.8/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 130, in get_requires_for_build_wheel
          return hook(config_settings)
        File "/tmp/pip-build-env-0u1shkl5/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 325, in get_requires_for_build_wheel
          return self._get_build_requires(config_settings, requirements=['wheel'])
        File "/tmp/pip-build-env-0u1shkl5/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 295, in _get_build_requires
          self.run_setup()
        File "/tmp/pip-build-env-0u1shkl5/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 311, in run_setup
          exec(code, locals())
        File "<string>", line 155, in <module>
        File "<string>", line 49, in get_config_posix
        File "<string>", line 28, in find_package_name
      Exception: Can not find valid pkg-config name.
      Specify MYSQLCLIENT_CFLAGS and MYSQLCLIENT_LDFLAGS env vars manually
      [end of output]

当前requirements配置

beautifulsoup4==4.12.3
bs4==0.0.2
Django==2.2
gunicorn==20.1.0
mysqlclient==2.2.4
numpy==1.24.4
pandas==2.0.3
python-dateutil==2.9.0.post0
pytz==2024.1
six==1.16.0
soupsieve==2.5
sqlparse==0.4.4
tzdata==2024.1
whitenoise==6.4.0

已尝试的.ebextensions配置

环境变量设置

option_settings:
  aws:elasticbeanstalk:application:environment:
    MYSQLCLIENT_CFLAGS: "-I/usr/include/mysql"
    MYSQLCLIENT_LDFLAGS: "-L/usr/lib64/mysql"

Yum依赖安装

packages:  
  yum:
    python3-devel: []
    mariadb-devel.x86_64: []
    mariadb.x86_64: []
    gcc: []

下一步解决建议

  • 验证依赖路径正确性:登录EC2实例,检查/usr/include/mysql和/usr/lib64/mysql是否存在。部分Amazon Linux 2环境中,mariadb的头文件和库路径可能是/usr/include/mariadb和/usr/lib64/mariadb,若存在则修改环境变量为:
    MYSQLCLIENT_CFLAGS: "-I/usr/include/mariadb"
    MYSQLCLIENT_LDFLAGS: "-L/usr/lib64/mariadb -lmariadb"
    
  • 调整EB部署流程顺序:确保yum依赖在pip安装前完全生效。可在.ebextensions中添加commands强制刷新库路径:
    commands:
      01_refresh_lib:
        command: ldconfig
    
  • 使用预编译wheel包:在requirements文件中添加--only-binary=mysqlclient,强制pip使用预编译包而非源码编译,避免依赖缺失问题:
    mysqlclient==2.2.4 --only-binary=mysqlclient
    
  • 替换为pymysql(备选方案):若mysqlclient编译问题持续,可改用pymysql替代。修改requirements,添加pymysql==1.1.0,并在Django项目的__init__.py中添加:
    import pymysql
    pymysql.install_as_MySQLdb()
    
  • 检查mysqlclient版本兼容性:尝试降级mysqlclient到2.1.1或升级到最新兼容版本,部分旧版本对编译环境要求更低。

内容的提问来源于stack exchange,提问作者Wehl Berker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:35:31