Django安装requirements.txt时报metadata generation failed错误
报错原因
- 依赖清单存在无效包:
sklearn==0.0是早就废弃的空占位包,没有实际功能,安装时会直接触发元数据生成失败,正常调用scikit-learn不需要单独安装这个包。 - 编译依赖缺失:
psycopg2==2.8.6是PostgreSQL的Python驱动,默认从源码编译安装,Windows缺PostgreSQL开发组件、Linux缺libpq-dev/python3-dev/编译工具链、macOS缺对应brew安装的pg依赖时,编译环节直接失败就会报这类错。 - Python版本不兼容:清单里所有依赖都是2021年发布的旧版本,最高只支持Python 3.9,用Python 3.10及以上版本安装时,会因为语法、接口不兼容触发元数据生成、编译类报错。
- 依赖没有完整安装的前提下,项目运行所需的核心库缺失,直接执行
python manage.py migrate肯定无法正常运行。
解决步骤
- 第一步先核对虚拟环境Python版本,执行
python --version查看,如果版本号高于3.9,直接删掉现有虚拟环境,重新创建基于Python 3.9的虚拟环境,从根源规避旧依赖和新高版本Python的兼容问题。 - 安装系统前置依赖:
- Ubuntu/Debian系执行:
sudo apt install python3.9-dev libpq-dev build-essential - Windows环境不需要装pg开发组件,后续直接换预编译的psycopg2包即可
- macOS执行:
brew install postgresql
- Ubuntu/Debian系执行:
- 修改原requirements.txt文件:删掉
sklearn==0.0整行,把psycopg2==2.8.6替换为psycopg2-binary==2.8.6,避免源码编译的各种坑。 - 回到激活的虚拟环境,先把pip降到适配这批旧依赖的版本:
pip install pip==21.3.1,再执行pip install -r requirements.txt,此时不会再出现元数据生成失败的报错。 - 依赖全部安装完成后,再执行
python manage.py migrate完成数据库迁移,即可正常启动项目。
注意:项目内的pickle格式机器学习模型是用scikit-learn 0.24.2训练导出的,不要随意升级scikit-learn、numpy、scipy的版本,否则加载模型时会出现版本不兼容报错。
内容的提问来源于stack exchange,提问作者panda
相关产品推荐
相关产品推荐

