[英]How to deploy a node.js app that runs a python script in Azure?
I'm trying to deploy a node.js app that calls a python script for background tasks. 我正在尝试部署一个node.js应用,该应用调用用于后台任务的python脚本。 The way I'm implementing it is via python-shell: 我实现它的方式是通过python-shell:
var pythonShell = require('python-shell');
var options = {
pythonPath: 've-env/bin/python3',
args:
[
req.query.term,
req.params.id,
req.session.user.searchName,
req.session.user.searchKey
]
};
pythonShell.run('VideoAnalyzer/Search.py', options, function (err, data) {
if (err)
throw err ;
var values = JSON.parse(data[0]).value;
var resultsByRel = values;
res.render('video', {resultsByRel: resultsByRel, resultsByTime: [], searchTerm: req.query.term, url: req.query.url});
});
The path to python is specified in options.pythonPath (in a python virtual environment called 've-env'). python的路径在options.pythonPath中指定(在称为“ ve-env”的python虚拟环境中)。
This works in my local environment. 这在我的本地环境中有效。 However, when I deployed my app to Azure App Service, I got the following error message: 但是,当我将应用程序部署到Azure App Service时,出现以下错误消息:
Error: spawn Unknown system error -8
at _errnoException (util.js:992:11)
at ChildProcess.spawn (internal/child_process.js:323:11)
at exports.spawn (child_process.js:502:9)
at new PythonShell (/home/site/wwwroot/node_modules/python-shell/index.js:59:25)
at Function.PythonShell.run (/home/site/wwwroot/node_modules/python-shell/index.js:160:19)
at Object.exports.search_result_video (/home/site/wwwroot/controllers/searchController.js:20:15)
at /home/site/wwwroot/routes/video.js:15:21
at Layer.handle [as handle_request] (/home/site/wwwroot/node_modules/express/lib/router/layer.js:95:5)
at next (/home/site/wwwroot/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/home/site/wwwroot/node_modules/express/lib/router/route.js:112:3)
The app is deployed in Linux environment with node version v8.9. 该应用程序已部署在节点版本为v8.9的Linux环境中。
Is there any python environment configuration I should have performed before deployment? 部署之前我应该执行任何python环境配置吗?
Is there any python environment configuration I should have performed before deployment? 部署之前我应该执行任何python环境配置吗?
The answer is yes. 答案是肯定的。 If you want to run python script in Azure App Service,you need to install python environment in your application.Please refer to the steps below: 如果要在Azure App Service中运行python脚本,则需要在应用程序中安装python环境。请参考以下步骤:
Please refer to my work steps and see if the error still shows up. 请参考我的工作步骤,看看错误是否仍然出现。
Step 1 : Add Extensions on the portal(here is Python 3.6.1 x64) 步骤1:在门户网站上添加扩展(这里是Python 3.6.1 x64)
Step 2: Switch to the Kudu CMD and commands cd Python364x64
and touch get-pip.py
and copy the content of the url https://bootstrap.pypa.io/get-pip.py
into the get-pip.py
via Edit button, then run python get-pip.py
to install the pip tool. 第2步:切换到Kudu CMD并命令cd Python364x64
并touch get-pip.py
, get-pip.py
通过编辑将URL https://bootstrap.pypa.io/get-pip.py
的内容复制到get-pip.py
按钮,然后运行python get-pip.py
安装pip工具。
Step 3 : Install any packages you need via python -m pip install requests
第3步:通过python -m pip install requests
安装所需的任何软件包
Then you need to modify the python configuration of your code: 然后,您需要修改代码的python配置:
var express = require('express');
var pythonShell = require('python-shell');
var router = express.Router();
var options = {
pythonPath: 'D:/home/python364x64/python',
scriptPath: 'D:/home/site/wwwroot'
// args:
// [
// req.query.term,
// req.params.id,
// req.session.user.searchName,
// req.session.user.searchKey
// ]
};
var resultsByRel;
pythonShell.run('TestRequests.py', options, function (err, data) {
if (err) throw err;
// results is an array consisting of messages collected during execution
var values = JSON.parse(data[0]);
resultsByRel = values;
console.log('results: %j', resultsByRel);
});
router.get('/', function(req, res, next) {
res.send(resultsByRel);
// res.render('executePython', resultsByRel );
});
module.exports = router;
My simple python script: 我简单的python脚本:
import requests
r= requests.get("https://www.bing.com")
print (r.status_code)
Hope it helps you. 希望对您有帮助。 Any concern ,please let me know. 如有任何疑问,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.