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

如何在Heroku部署含Python包/虚拟环境的JS Web应用?

解决Heroku上Node应用调用Python代码失败的问题

核心原因

Heroku不会自动识别Python环境配置,除非明确添加Python buildpack;而且本地的venv逻辑在Heroku上完全不适用——Heroku会自动管理Python运行环境,不需要手动激活虚拟环境。

具体解决方案

  1. 给Heroku项目添加Python buildpack
    Heroku默认只会启用Node.js buildpack,必须手动添加Python的buildpack,才能让Heroku安装requirements.txt里的依赖:
# 先添加Python buildpack(顺序很重要,要放在Node之前)
heroku buildpacks:add --index 1 heroku/python
# 再添加Node.js buildpack
heroku buildpacks:add --index 2 heroku/nodejs

部署时Heroku会先完成Python环境和依赖的安装,再处理Node项目。

  1. 确认runtime.txt和requirements.txt的格式与位置
  • runtime.txt必须精确写成python-3.10.6,不能有多余空格或拼写错误,放在项目根目录。
  • requirements.txt要包含所有需要的Python依赖包,一行一个,同样放在根目录。
  1. 在Node代码中指定Heroku的Python路径
    本地用的是venv里的Python,但Heroku的Python有固定安装路径,需要告诉python-bridge去哪里找:
const { PythonBridge } = require('python-bridge');
// 本地开发用默认python,线上用Heroku的Python路径
const pythonExecPath = process.env.NODE_ENV === 'production' 
  ? '/app/.heroku/python/bin/python' 
  : 'python';
const python = new PythonBridge({ python: pythonExecPath });

也可以在Heroku的环境变量里设置PYTHON_PATH=/app/.heroku/python/bin/python,代码里读取更灵活:

const pythonExecPath = process.env.PYTHON_PATH || 'python';
const python = new PythonBridge({ python: pythonExecPath });
  1. 验证部署后的环境
    部署完成后,可通过命令行进入Heroku容器检查:
heroku run bash
# 检查Python路径是否正确
which python
# 检查依赖是否安装成功
pip list

如果依赖没装,大概率是buildpack顺序错误或requirements.txt有问题,调整后重新部署即可。

  1. Procfile保持简洁
    不要在Procfile里加任何venv相关命令,只保留Node服务的启动指令,比如:
web: yarn start

(根据你项目实际的启动命令调整,比如npm start)

内容的提问来源于stack exchange,提问作者Ethan Ansel-Kelly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:46:18