使用python-shell包在Node JS中安装Python包是否可行?

5
我刚刚了解到我们可以使用以下npm包在Node JS中运行Python脚本。 python-shell 是否可以使用相同的库安装Python包?
例如pip install package 我需要导入一些库来处理Python脚本。
如果无法使用此包,请问还有其他方法可以实现吗?

只是想澄清一下,您想使用python-shell从Node.js安装Python包吗? - Rahul
@Rahul 是的。我对这个包很新,不确定是否可能。 - Anirudh
为什么不直接在终端上使用 pip 安装呢?还是你想将其整合到其他东西中? - Rahul
@Rahul,我在Ubuntu服务器上运行一个Node应用程序。是否可以同时运行pip和Node应用程序? - Anirudh
1个回答

6

这是第一个文件:test.js

let {PythonShell} = require('python-shell');
var package_name = 'pytube'
let options = {
    args : [package_name]
}
PythonShell.run('./install_package.py', options, 
    function(err, results)
    {
        if (err) throw err;
        else console.log(results);
    })

这个文件通过命令行传递参数来运行另一个文件install_package.py
你可以使用类似document.getElementById().value()的方法从你的HTML中获取包名。
以下是第二个文件:install_package.py

import os
import sys
os.system('python3 -m pip install {}'.format(sys.argv[1]))

这将安装传递给它的任何软件包。
由于软件包pytube已经为我安装,因此输出结果如下:

rahul@RNA-HP:~$ node test.js
[ 'Requirement already satisfied: pytube in ./.local/lib/python3.7/site-packages (9.5.0)' ]

可以使用subprocess而不是os来完成相同的操作:

import subprocess
import sys
process = subprocess.Popen(['python3', '-m', 'pip', 'install', sys.argv[1]], stdout = subprocess.PIPE)
output, error = process.communicate()
output = output.decode("utf-8").split('\n')
print(output)

使用subprocess输出:
rahul@RNA-HP:~$ node test.js
[ "['Requirement already satisfied: pytube in ./.local/lib/python3.7/site-packages (9.5.0)', '']" ]

希望这有所帮助。
如果还有改进的地方,请留言。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接