Пакет nodejs child_process не работает для скрипта Python только при использовании определенных импортов - PullRequest
0 голосов
/ 21 ноября 2018

Я пишу простое приложение Electron для Windows, которое использует несколько файлов python, использующих различные библиотеки машинного обучения python.На данный момент моя цель - просто нажать кнопку, которая выполняет скрипт Python, который либо сохраняет выходные данные в файл, локальный по отношению к каталогу скрипта Python, либо возвращает выходные данные в приложение Electron - в любом случае это хорошо.

Использование нескольких различных методов (exec, spawn и т. Д.).Я успешно вызвал скрипт Python, и он заставил скрипт Python правильно записывать тестовые значения в файлы и корректно возвращать тестовые значения в мои приложения.

const { spawn } = require('child_process');

const pyProg = spawn('python', ['./../path/to/pyfile/cmd_test.py', 'arg1', 'arg2'...], {detached: true});

pyProg.stdout.on('data', function(data) {
alert(data);
console.log(data.toString());
});

Проблема заключается в том, что после импорта одного из двух необходимыхбиблиотеки для моего скрипта Python (pandas и sklearn), скрипт останавливается и не записывает в файл и не возвращает вывод.Это не тот случай, когда импортируются некоторые другие библиотеки, такие как numpy или sys.Если я закомментирую импорт панд (или sklearn), все будет нормально.

import sys
import ast
import numpy as np
#import pandas as pd

Более того, если я вручную вызову ту же команду командной строки, которую приложение Electron выполняет из того же каталога, что и приложение ElectronСама программа работает правильно, и запись и вывод файлов работают правильно, независимо от того, импортирую ли я панд или sklearn.

python ./../path/to/pyfile/cmd_test.py arg1 arg2

1 Ответ

0 голосов
/ 21 ноября 2018

Похоже, что python не находит установленные пакеты.

Разница между sys, ast и numpy с пандами в том, что первые 3 являются стандартными библиотеками, а pandas - третьим лицом.Если вы установили его через pip, попробуйте добавить путь к установленным библиотекам в ваш путь к Python.Поместите это поверх питона

  • Если вы используете питон 3:

    import sys
    sys.path.append(C:\Users\%USERNAME%\AppData\Roaming\Python\Python3X[-32]\site-packages)
    

Обратите внимание, что есть X и a -32 в скобках.X должен быть вашей под-версией Python 3, и вы должны поставить -32, если вы установили 32-битную версию Python.

  • Если вы используете 2.7:

    import sys
    sys.path.append(c:\Python27\Lib\site-packages)
    

Это маршруты по умолчанию для окон, они могут отличаться на вашем компьютере, если вы установите их в установке

  • Если вы используете Unix-как система, затем добавьте это:

    import sys
    sys.path.append(/usr/lib/pythonX.Y/site-packages)
    

Обратите внимание на X и Y, это должны быть версия и подверсия соответственно.Если вы не знаете свою версию Python, просто выполните в консоли / терминале:

python --version

Она должна вернуть что-то вроде этого:

Python 3.7.1

Используйте только первые 2 числа дляпуть.

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