如何在 Heroku 中部署带有子进程 (python) 的 Node.js 应用程序?

fer*_*tti 3 python heroku child-process node.js

我正在尝试部署一个带有运行机器学习算法的子进程的 Node.js 应用程序。我可以在本地使用它,但是当我尝试在 Heroku 服务器上运行时,我收到一些消息,称缺少一些库,如下所示:

ModuleNotFoundError: No module named 'pandas'
Run Code Online (Sandbox Code Playgroud)

我尝试手动创建requirements.txt并将必要的库放在那里:

pandas
pymongo
dnspython
scikit-learn      
scipy           
selenium
webdriver-manager
textblob
Run Code Online (Sandbox Code Playgroud)

但这不起作用。我需要做一些额外的配置吗?

非常感谢你的帮助!

rde*_*ges 5

Heroku dynos 运行软件的方式是通过称为buildpack 的方式。

当您将应用程序部署到 Heroku 时,它会查看您的代码并尝试找出您正在使用的编程语言,然后基于该语言,将使用相应的构建包运行您的应用程序。

例如,如果您将应用程序部署到 Heroku 并且该应用程序package.json在项目目录的根目录中有一个文件,Heroku 将假定您的应用程序是 JavaScript 应用程序并使用Node.js buildpack

Buildpack 包含许多预安装的依赖项。例如,Node.js 构建包包含node(以便您可以运行 JavaScript 代码)以及许多 Linux 依赖项,以便您的应用程序能够安装可能依赖它们的通用库/工具。

但是......这种构建包策略的一个缺点是,例如,如果您要部署 Node.js 应用程序,则默认的 Node.js 构建将不会附带 Python 以及安装的各种 Python 库依赖项。这是因为 Heroku 支持许多不同的编程环境,如果只有一个构建包安装了所有内容,那么速度会很慢/很复杂。这太疯狂了!

因此,就您的情况而言,您需要做的是使用多个构建包!Heroku 有一种方法可以让您为您的应用程序启用多个构建包,以便您的应用程序可以具有 Node.js 依赖项以及Python 依赖项!

Heroku 文档网站上的这篇文章解释了如何为给定应用程序使用多个构建包。

为简单起见,以下是具体说明:

# This command will set your default buildpack to Node.js
$ heroku buildpacks:set heroku/nodejs

# This command will set it up so that the Heroku Python buildpack will run first
$ heroku buildpacks:add --index 1 heroku/python
Run Code Online (Sandbox Code Playgroud)

通过执行上述操作,您将能够让 Heroku 通过传统的requests.txt文件安装您的 Python 依赖项,就像使用任何普通 Python 应用程序一样。