部署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
相关产品推荐
相关产品推荐

