NodeJS: запустить python скрипт в среде conda - PullRequest
1 голос
/ 21 января 2020

У меня много сценариев python, и у каждого есть своя зависимость.
И я создаю среду conda для каждого сценария python и устанавливаю зависимости тоже.

И я попробовал много способов, как показано ниже

Пробовал 1

const childProcess = require('child_process');

const pythonScript = 'test.py';
const environmentName = 'test';

const command = [
  `conda activate ${environmentName}`,
  `python ${pythonScript}`
]
  .map(v => `(${v})`)
  .join(' && ');

const pythonProcess = childProcess.spwan(command, { shell: true });

pythonProcess.stdin.on('data', (data) => console.log(data.toString()));
pythonProcess.stderr.on('data', (data) => console.error(data.toString()));

pythonProcess.on('close', (code) => {
  console.log('Process Exited:', code);
});

Пробовал 2

const command = [
  `conda activate ${environmentName}`,
  `python ${pythonScript}`
]
  .map(v => `(${v})`)
  .join(' && ');

const pythonProcess = childProcess.spwan(`bash -lc "${command}"`, { shell: true });

Пробовал 3

const command = [
  `source /opt/conda/etc/profile.d/conda.sh`,
  `conda activate ${environmentName}`,
  `python ${pythonScript}`
]
  .map(v => `(${v})`)
  .join(' && ');

const pythonProcess = childProcess.spwan(`bash -lc "${command}"`, { shell: true });

Но, в скрипте python среда conda не не включен (только что включен conda environemnt по умолчанию).

Как запустить скрипт python в указанной c среде conda в nodejs?

1 Ответ

1 голос
/ 22 января 2020

Команда conda activate - это функция оболочки, а не настоящий CLI, поэтому она недоступна без предварительного запуска оболочки в интерактивном режиме (при условии, что вы ранее запустили conda init). Попробуйте использовать conda run вместо этого. В вашем первом примере я думаю, что это будет что-то вроде

const command = `conda run -n ${environmentName} python ${pythonScript}`

Это позволяет выполнять команды в среде без необходимости вручную активировать среду.

...