Могут ли панды в скрипте Python использоваться с nodejs - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь вызвать использование скрипта Python с NodeJS, и он будет работать со скриптом Python 'Hello World', но я не могу заставить скрипт Python выполняться, когда в скрипте используются панды.

numpy == 1.15.1 pandas == 0.23.4

nodeJS

router.get('/', (req, res) => {
  const filePath = 'python/testing2.py' 
  const spawn = require("child_process").spawn;
  const pythonProcess = spawn('python3',[filePath, '-l']); 

  util.log('readingin')
  pythonProcess.stdout.on('data', (data) => { 
    const textChunk = data.toString('utf8');// buffer to string
    util.log(textChunk);
    res.json({'working': true, 'data': textChunk})
  });
});

python:

import sys 
from pandas import read_csv
from pandas import datetime    

def parser(x):
    return datetime.strptime('190'+x, '%Y-%m')    

print("Output from Python") 
series = read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
print (series)
sys.stdout.flush()

если я сам запускаю скрипт python:

$ python3 testing2.py
Output from Python
Month
1901-01-01    266.0
1901-02-01    145.9
1901-03-01    183.1
1901-04-01    119.3...

$ pip3 freeze
matplotlib==2.2.3
numpy==1.15.1
pandas==0.23.4

Ответы [ 2 ]

0 голосов
/ 04 августа 2019

В моем случае я использовал метод запуска PythonShell, использующий пакет npm для python-shell:

Вам нужно будет предоставить в Python Shell параметры, указывающие pythonPath на путь в вашем virtualenv:

  var options = {
    mode: 'text',
    pythonPath: '/Users/WC/anaconda/envs/testtoday/bin/python',
    pythonOptions: ['-u'], // get print results in real-time
    scriptPath: '/Volumes/Transcend/NodeJSTest/PythonNodeJS',
    args:
    [
      req.query.funds, // starting funds
      req.query.size, // (initial) wager size
      req.query.count, // wager count - number of wagers per sim
      req.query.sims // number of simulations
    ]
  }

  ps.PythonShell.run('./d_alembert.py', options, function (err, data) {
    if (err) res.send(err);
    res.send(data.toString());
  });

Чтобы найти путь к virtualenv, активируйте его:

source activate testtoday

, затем введите:

which python

Весь импорт, который будет у вас вVirtualenv становится доступным для использования в вашем сценарии.

0 голосов
/ 20 сентября 2018

Всегда проверяйте, что команды, запускаемые вами из других процессов, используют тот же исполняемый файл Python, который вы ожидаете.Обычные способы сделать это:

which python3

или

where python3

из вашей оболочки или

import sys
print(sys.executable)

в вашем скрипте Python.

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