I'm trying to deploy a node.js app that calls a python script for background tasks. The way I'm implementing it is via 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').
This works in my local environment. However, when I deployed my app to Azure App Service, I got the following error message:
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.
Is there any python environment configuration I should have performed before deployment?
Is there any python environment configuration I should have performed before deployment?
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:
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)
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.
Step 3 : Install any packages you need via python -m pip install requests
Then you need to modify the python configuration of your code:
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:
import requests
r= requests.get("https://www.bing.com")
print (r.status_code)
Hope it helps you. Any concern ,please let me know.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With