网站无法部署至Heroku,是否为Numpy引发的问题?
网站当前使用已废弃的Heroku-18栈,需重新部署至Heroku-22栈,但部署时出现报错,日志多次提及Numpy相关错误,推测这可能是问题根源。
已尝试的操作:
- 升级pip
- 修改
runtime.txt中的Python版本(从python-3.7.0改为python-3.9.13) - 重新安装Numpy(当前版本1.18.1)
遇到的部分错误信息:
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/mywebsite.git'
error: Command "gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -Inumpy/core/include -Ibuild/src.linux-x86_64-3.9/numpy/core/include/numpy -Inumpy/core/src/private -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/app/.heroku/python/include/python3.9 -Ibuild/src.linux-x86_64-3.9/numpy/core/src/private -Ibuild/src.linux-x86_64-3.9/numpy/core/src/npymath -Ibuild/src.linux-x86_64-3.9/numpy/core/src/private -Ibuild/src.linux-x86_64-3.9/numpy/core/src/npymath -Ibuild/src.linux-x86_64-3.9/numpy/core/src/private -Ibuild/src.linux-x86_64-3.9/numpy/core/src/npymath -c numpy/random/mtrand/mtrand.c -o build/temp.linux-x86_64-3.9/numpy/random/mtrand/mtrand.o -MMD -MF build/temp.linux-x86_64-3.9/numpy/random/mtrand/mtrand.o.d" failed with exit status 1
ERROR: Failed cleaning build dir for numpy
remote: Failed to build numpy
ERROR: Failed building wheel for numpy
请问如何解决这些错误?是否存在非Numpy相关因素导致部署失败?
一、Numpy版本适配修复
Numpy 1.18.1对Python 3.9的支持不完善,二者兼容性冲突是编译失败的核心原因。解决步骤:
- 修改
requirements.txt,将numpy==1.18.1替换为支持Python 3.9的稳定版本,比如numpy>=1.21.0(该版本开始官方兼容Python 3.9),或指定具体稳定版本如numpy==1.23.5 - 本地先验证依赖安装:创建Python 3.9虚拟环境,执行
pip install -r requirements.txt确认无报错,再提交代码部署
二、补充Heroku-22系统依赖
Heroku-22栈的基础依赖和Heroku-18不同,缺少Numpy编译所需的底层库,导致gcc编译失败。操作:
- 在项目根目录创建
Aptfile文件 - 写入以下依赖内容:
libopenblas-dev liblapack-dev gfortran - 将
Aptfile提交至Git后重新部署,这些库是Numpy编译必需的线性代数与Fortran支持组件
三、非Numpy相关因素排查
除Numpy外,以下情况也可能导致部署失败:
- Buildpack或配置残留:检查是否使用官方Python buildpack,清理Heroku-18时期的自定义环境变量(尤其是与Python版本、编译相关的变量)
- 其他依赖兼容性:排查
requirements.txt中所有包的版本,确保均支持Python 3.9;本地虚拟环境中测试全依赖安装与运行,排除其他包的适配问题 - 构建缓存冲突:Heroku缓存的旧依赖可能干扰新部署,执行以下命令清除缓存后重试:
heroku plugins:install heroku-builds heroku builds:cache:purge -a mywebsite
内容的提问来源于stack exchange,提问作者curiousIT

