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

Heroku部署Flask应用遇slug过大,求缩减/app/.heroku体积方案

问题:Heroku部署Flask应用时Slug过大,/app/.heroku目录占用空间过高

部署Python(Flask)应用到Heroku时遇到slug size is too large错误,执行空间分析命令后发现/app/.heroku目录占用了266M空间:

$ du -ha --max-depth 1 /app | sort -hr
286M    /app
266M    /app/.heroku
14M     /app/.apt
6.9M    /app/lang
24K     /app/.profile.d
8.0K    /app/requirements.txt
4.0K    /app/runtime.txt
4.0K    /app/requirements.in
4.0K    /app/README.md
4.0K    /app/Procfile
4.0K    /app/Aptfile

想知道如何缩减/app/.heroku的大小,听说该目录存储Python二进制文件,具体操作方法是什么?

补充应用依赖列表:

beautifulsoup4==4.12.3
certifi==2022.12.7
Flask==3.0.3
Flask_Cors==4.0.0
flask_mailman==1.1.0
flask_session==0.8.0
google_api_python_client==2.122.0
numpy==1.26.4
openai==1.30.1
protobuf==5.26.1
pymongo==4.6.2
python_bcrypt==0.3.2
qdrant_client==1.9.1
Requests==2.32.2
sentence_transformers==2.4.0
spacy==3.7.4
stripe==8.7.0

解决方法
  • 清理Python构建缓存
    /app/.heroku/python子目录存储了Python运行时和依赖的构建缓存,可通过添加Heroku官方的清理构建包自动移除冗余文件:
    在requirements.txt末尾追加以下内容:

    -e git+https://github.com/heroku/heroku-buildpack-python.git#egg=clean
    

    这样构建过程会自动清理不必要的缓存文件,缩小/.heroku目录体积。

  • 优化依赖包,移除冗余数据
    你的依赖中有几个体积较大的包,针对性优化:

    • sentence_transformers和spacy会自带预训练模型,这些模型很占空间。可以改成部署后动态下载模型,或者把模型存到外部存储(如对象存储服务),不要打包进slug。
    • numpy等科学计算包的二进制文件体积不小,确认当前版本是否为必需,尝试降级到兼容的更小版本(注意验证功能正常)。
    • 用pip check和手动排查,移除未实际使用的依赖包。
  • 使用轻量Python运行时
    在runtime.txt中指定具体的最新小版本Python(比如python-3.11.9),避免使用通用版本带来的冗余文件。最新版本的Python运行时通常会优化二进制文件大小。

  • 自定义构建后清理步骤
    添加构建后脚本,删除依赖包中的冗余文件:
    比如在项目根目录创建post_compile脚本(赋予可执行权限),内容如下:

    #!/bin/bash
    # 删除依赖中的文档、测试文件
    find /app/.heroku/python/lib/python*/site-packages -name "tests" -type d | xargs rm -rf
    find /app/.heroku/python/lib/python*/site-packages -name "*.md" -o -name "*.rst" | xargs rm -rf
    # 删除多余的编译文件
    find /app/.heroku/python/lib/python*/site-packages -name "__pycache__" -type d | xargs rm -rf
    

    这样构建完成后会自动清理这些不必要的文件。

  • 排查/.heroku下的具体大目录
    登录Heroku容器查看/.heroku的子目录分布:

    heroku run bash
    du -ha --max-depth 2 /app/.heroku | sort -hr
    

    如果发现/.heroku/builds等遗留构建目录,可以在post_compile脚本中添加删除命令清理它们。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:12:41