Можно ли установить пакеты Python в Node JS, используя пакет python-shell? - PullRequest
0 голосов
/ 10 мая 2019

Я только что узнал, что мы можем запускать скрипты Python в Node JS, используя приведенный ниже пакет npm.

python-shell

Возможно ли установить пакеты Python с использованием той же библиотеки?Что-то вроде pip install package

Мне нужно импортировать несколько библиотек для работы со скриптами Python.

Если это невозможно с этим пакетом, есть ли другой способ добиться этого?

1 Ответ

0 голосов
/ 10 мая 2019

Вот первый файл: 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 с аргументами, переданными этому файлу через командную строку.
Вы можете получить имя пакета из своего HTML, используя что-то вроде document.getElementById().value()
Вот второй файл: 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)', '']" ]

Надеюсь, это поможет.
Прокомментируйте, если что-то можно улучшить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...