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

如何在Heroku中部署具有子进程(python)的Node.js应用程序?,python,node.js,heroku,child-process,Python,Node.js,Heroku,Child Process,我正在尝试部署一个Node.js应用程序,其中包含一个子进程,该子进程运行机器学习算法。我可以在本地使用它,但当我尝试在Heroku服务器上运行时,我收到一些调用缺少某些库的消息,如bellow: ModuleNotFoundError: No module named 'pandas' 我尝试手动创建requirements.txt并将必要的库放在那里: pandas pymongo dnspython scikit-learn scipy selenium

我正在尝试部署一个Node.js应用程序,其中包含一个子进程,该子进程运行机器学习算法。我可以在本地使用它,但当我尝试在Heroku服务器上运行时,我收到一些调用缺少某些库的消息,如bellow:

ModuleNotFoundError: No module named 'pandas'
我尝试手动创建requirements.txt并将必要的库放在那里:

pandas
pymongo
dnspython
scikit-learn      
scipy           
selenium
webdriver-manager
textblob
但它不起作用。我需要做一些额外的配置吗


非常感谢你的帮助

Heroku dynos运行软件的方式是通过一种叫做

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

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

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

但是。。。此buildpack策略的一个缺点是,例如,如果您正在部署Node.js应用程序,默认的Node.js构建将不会附带Python和安装的各种Python库依赖项。这是因为Heroku支持很多不同的编程环境,如果只有一个buildpack安装了所有的东西,那么它会很慢/复杂。那太疯狂了

因此,在您的情况下,您需要做的是使用多个构建包!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

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

非常感谢您的帮助!这工作做得很好!