Heroku未安装Ruby/Python混合应用requirements.txt内容的问题求助
看起来你遇到的核心问题是Heroku多构建包的环境变量优先级冲突以及ffmpeg的安装方式不对,我来一步步帮你搞定:
1. 修复PATH环境变量,让Ruby能找到youtube-dl
Heroku在使用多个构建包时,会把最后一个构建包的环境变量(比如PATH)设为默认。如果你的heroku/ruby是最后一个构建包,那么Python安装的youtube-dl所在的/.heroku/python/bin目录不会被加入到PATH里——这就是为什么调用时提示"not found",同时pip命令也因为不在PATH里而无法使用。
两种解决方式:
方式一:直接把Python的bin目录加入PATH
运行以下命令设置环境变量:
heroku config:set PATH="/.heroku/python/bin:$PATH"
这样不管构建包顺序如何,Python的二进制文件都会被优先找到,youtube-dl和pip就能正常访问了。
方式二:调整构建包顺序,让Python作为最后一个
Heroku会保留最后一个构建包的PATH配置,所以把heroku/python放在末尾:
# 先查看当前构建包顺序 heroku buildpacks # 如果Python不是最后一个,先移除再添加到末尾 heroku buildpacks:remove heroku/python heroku buildpacks:add --index 2 heroku/python # 或者直接用重新排序命令 heroku buildpacks:reorder heroku/python --last
2. 正确安装ffmpeg
你在requirements.txt里写的ffmpeg其实只是一个Python轻量包装器,不会安装真正的ffmpeg二进制文件。要在Heroku上使用ffmpeg,必须添加专门的ffmpeg构建包:
heroku buildpacks:add https://github.com/jonathanong/heroku-buildpack-ffmpeg-latest.git
同时,建议把requirements.txt的格式修正为每个依赖单独一行(Heroku的Python构建包是按行解析的):
youtube-dl # 如果需要Python的ffmpeg包装器辅助调用,可以加这行,否则不需要 # ffmpeg-python
3. 重新部署应用
完成以上配置后,提交你的代码变更(比如修改后的requirements.txt),然后重新部署:
git add requirements.txt git commit -m "Fix dependencies and buildpack configs" git push heroku main
部署完成后,你的/download端点应该就能正常调用youtube-dl和ffmpeg了。
另外提醒下:不需要手动运行heroku run pip3 install -r requirements.txt,Heroku在构建阶段会自动读取requirements.txt并安装依赖,手动安装的依赖会在dyno重启后丢失,一定要通过构建包自动安装才靠谱。
内容的提问来源于stack exchange,提问作者crodev




