【问题标题】:How to deploy a node.js app that runs a python script in Azure?如何部署在 Azure 中运行 python 脚本的 node.js 应用程序?
【发布时间】:2018-08-17 16:04:03
【问题描述】:

我正在尝试部署一个 node.js 应用程序,该应用程序为后台任务调用 python 脚本。我实现它的方式是通过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});
});

python 的路径在 options.pythonPath 中指定(在名为 've-env' 的 python 虚拟环境中)。

这适用于我的本地环境。但是,当我将我的应用部署到 Azure 应用服务时,我收到了以下错误消息:

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)

该应用部署在Linux环境,节点版本为v8.9。

在部署之前我应该​​执行任何 python 环境配置吗?

【问题讨论】:

  • 您好,有更新吗?我的回答对您有帮助吗?

标签: python node.js azure deployment azure-web-app-service


【解决方案1】:

有没有我应该执行的python环境配置 部署前?

答案是肯定的。如果你想在 Azure 应用服务中运行 python 脚本,你需要在你的应用程序中安装 python 环境。请参考以下步骤:

请参考我的工作步骤,看看错误是否仍然出现。

第 1 步:在门户上添加扩展(这里是 Python 3.6.1 x64)

第二步:切换到 Kudu CMD 和命令cd Python364x64touch get-pip.py 并通过编辑按钮将url https://bootstrap.pypa.io/get-pip.py 的内容复制到get-pip.py 中,然后运行python get-pip.py 以安装pip 工具。

第 3 步:通过python -m pip install requests 安装您需要的任何软件包

那你需要修改你代码的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;

我的简单python脚本:

import requests

r= requests.get("https://www.bing.com")
print (r.status_code)

希望对您有所帮助。有任何问题,请告诉我。

【讨论】:

    猜你喜欢
    • 2017-06-30
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    相关资源
    最近更新 更多