如何用.slugignore减小Heroku编译slug体积?无法查看文件
解决Heroku Python机器学习应用Slug过大问题
首先要明确:heroku run bash进入的是运行容器,不是编译Slug的环境,所以你看到的/app大小不代表实际Slug的体积,这是核心误区。下面是具体解决步骤:
一、正确分析Slug内的文件大小
要看到真实的Slug文件分布,需要把Slug下载到本地分析:
- 安装Heroku Slug插件(若未安装):
heroku plugins:install heroku-slugs - 下载Slug到本地:
heroku slug:download -a my-app-name - 解压下载的
slug.tgz文件,在本地终端执行以下命令查看大小分布:du -ha --max-depth 1 ./解压后的目录 | sort -hr
二、针对性缩小Slug体积(针对Python ML应用)
1. 精简依赖包
- 拆分依赖:将开发依赖(如pytest、jupyter、flake8)移到单独的
requirements-dev.txt,部署时只安装requirements.txt里的生产依赖。 - 避免缓存:在依赖安装命令中添加
--no-cache-dir,减少缓存文件占用,比如修改requirements.txt的安装逻辑(或通过buildpack配置):pip install --no-cache-dir -r requirements.txt - 用轻量化库:比如只安装CPU版本的PyTorch/TensorFlow(而非完整版),或用
polars替代pandas(视项目兼容性而定)。
2. 用.slugignore排除无关文件
创建.slugignore文件(和.gitignore语法一致),添加以下内容排除不必要的文件:
# 开发缓存 *.pyc __pycache__/ .pytest_cache/ .ipynb_checkpoints/ venv/ # 大型数据/模型(建议移到S3等外部存储) data/ models/ *.h5 *.pt *.pkl # 文档与配置 README.md LICENSE docs/ .env
如果必须部署模型文件,优先压缩模型(如用TorchScript量化、TensorFlow Lite转换),或换用更轻量化的模型结构。
3. 清理编译临时文件
创建bin/post_compile脚本,在编译完成后清理临时文件:
#!/usr/bin/env bash rm -rf /tmp/* rm -rf /app/.heroku/python/lib/python3.x/site-packages/*.so.dSYM
给脚本添加执行权限:
chmod +x bin/post_compile
将脚本提交到Git,部署时会自动执行清理。
三、验证效果
部署完成后,执行以下命令查看Slug大小:
heroku apps:info -a my-app-name
检查输出中的Slug Size字段,确认是否降到500M以下。
内容的提问来源于stack exchange,提问作者Bluetail
相关产品推荐
相关产品推荐

