如何指定在npm中使用哪个版本的python python-shell node.js

时间:2018-01-25 05:30:52

标签: python node.js heroku node-modules

我想使用python-shell在js文件中调用python脚本。但是脚本需要python3并且总是使用py2,而我的本地开发同时安装了py2和3。我如何指定使用python3代替?

app.get('/run_py', (req, res)=>{
    var myPythonScriptPath = 'script.py';

    // Use python shell
    var PythonShell = require('python-shell');
    var pyshell = new PythonShell("pyscripts/test.py");

    pyshell.on('message', function (message) {
        // received a message sent from the Python script (a simple "print" statement)
        console.log(message);
    });

    // end the input stream and allow the process to exit
    pyshell.end(function (err) {
        if (err){
            throw err;
        };

        //console.log('finished');
    });
});

我的py脚本看起来像:

import sys
if sys.version_info[0] < 3:
    raise Exception("Must be using Python 3")

print('running test.py')
print (sys.version_info[0])

在本地运行时总是使用python 2.7。

此外,当我将我的代码推送到默认使用python 3.6的heroku服务器时。脚本运行得很完美......

任何见解?请?

编辑:我看到你可以在PythonShell.run中指定python路径作为参数..但是如果不同的平台说heroku和我的本地机器有不同的python路径怎么办?

2 个答案:

答案 0 :(得分:2)

根据the python-shell documentation,您可以在PythonShell选项中指定python解释器路径。您需要做两件事:

  1. 确保在本地系统上安装了python3(可能需要pip install python3或类似的东西)
  2. 将python路径更改为指向python3(可能只需要/usr/bin/env python3
  3. 编辑:为了响应您的编辑,如果您的两个节点服务都在Linux上运行,您应该能够使用/usr/bin/env python3。有关跨系统的解决方案,请参阅this stackoverflow question

答案 1 :(得分:0)

更新:截至2018年8月7日,python3是默认的pythonPath。

https://github.com/extrabacon/python-shell/blob/f3b64d3307d8dc15eb9c071d8aa774c1e7d5b2d7/index.ts#L94