Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何指定在npm python shell node.js中使用哪个版本的python_Python_Node.js_Heroku_Node Modules - Fatal编程技术网

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

如何指定在npm python shell node.js中使用哪个版本的python,python,node.js,heroku,node-modules,Python,Node.js,Heroku,Node Modules,我想使用pythonshell调用js文件中的python脚本。但是,脚本需要python3,并且始终使用py2,而我的本地开发同时安装了py2和py3。我如何指定它使用python3呢 app.get('/run_py', (req, res)=>{ var myPythonScriptPath = 'script.py'; // Use python shell var PythonShell = require('python-shell'); va

我想使用pythonshell调用js文件中的python脚本。但是,脚本需要python3,并且始终使用py2,而我的本地开发同时安装了py2和py3。我如何指定它使用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])
导入系统 如果系统版本信息[0]<3: 引发异常(“必须使用Python 3”) 打印('running test.py') 打印(系统版本信息[0]) 在本地运行时,它总是使用python 2.7

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

有什么见解吗?求你了

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

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

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

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

  • 确保本地系统上安装了python3(可能需要
    pip安装python3
    或类似的东西)
  • 将python路径更改为指向python3(可能只需要是
    /usr/bin/env python3

  • 编辑:为了响应您的编辑,如果您的两个节点服务都在Linux上运行,您应该能够使用
    /usr/bin/env python3
    。有关跨系统的解决方案,请参阅。

    更新:自2018年8月7日起,python3是默认的pythonPath


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


    谢谢,但是如果服务器的python路径与我的本地计算机不同呢?对不起,我是个新手,不知道最佳做法是什么..请参见我的编辑:)您可以使用
    env
    指向一条路径,该路径将在两个系统上正确解析。看起来我可以简单地使用
    选项={pythonPath:'python3'}
    你能详细介绍一下如何使用
    env
    吗?比如
    选项={pythonPath:'/usr/bin/env python3'}
    ?它似乎不正确。
    选项={pythonPath:'python3'}
    选项={pythonPath:'/usr/bin/env python3'}
    可以,后者更明确。请参阅我在编辑中链接的SO响应!谢谢!但是如果服务器的python路径与我的本地计算机不同,该怎么办?抱歉,我是新手,我不知道最佳做法是什么..请参阅我的编辑:)您可以使用
    env
    来指向一条在两个系统上都能正确解析的路径。看起来我可以简单地使用
    选项={pythonPath:'python3'}
    您能详细介绍一下如何使用
    env
    吗?像
    选项={pythonPath:'/usr/bin/env python3'}
    ?它似乎不正确。
    选项={pythonPath:'python3'}
    选项={pythonPath:'/usr/bin/env python3'}
    都可以工作,后者更显式。查看我在编辑中链接的SO响应!