Менеджеры пакетов Python и Node.js - PullRequest
2 голосов
/ 18 октября 2019

Я пытаюсь скомпилировать скрипты Python, используя Node.js. Скрипты Python включают в себя некоторые модули, которые я установил. Мой менеджер пакетов для python - Anaconda, поэтому я попытался указать параметр {"shell":"path to anaconda prompt"} в:

var exec = require('child_process').exec;
exec('python hello.py',{"shell":"path to anaconda prompt"}, ..callback)

Однако я получаю сообщение об ошибке:

{ Error: spawn C:\Users\dream\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)\Anaconda Prompt (Anaconda3) ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:232:19)
    at onErrorNT (internal/child_process.js:407:16)
    at process._tickCallback (internal/process/next_tick.js:63:19)
    at Function.Module.runMain (internal/modules/cjs/loader.js:744:11)
    at startup (internal/bootstrap/node.js:285:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:739:3)
  errno: 'ENOENT',
  code: 'ENOENT',
  syscall:
   'spawn C:\\Users\\dream\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Anaconda3 (64-bit)\\Anaconda Prompt (Anaconda3)',
  path:
   'C:\\Users\\dream\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Anaconda3 (64-bit)\\Anaconda Prompt (Anaconda3)',
  spawnargs: [ '/d', '/s', '/c', '"python hello.py"' ],
  cmd: 'python hello.py' }
stdout:

stderr:

Я подозреваю, что этопотому что Anaconda Prompt - это просто какой-то странный ярлык, который устанавливает некоторые переменные для cmd.exe (это местоположение, на которое указывает ярлык).

Итак, мои вопросы:

Можно ли вызвать anaconda? подскажите напрямую с Node.js? Есть ли в pip оболочка?

Как упаковщики (pip, anaconda) делают модули доступными для python? -> Это через некоторые переменные окружения?

Можно ли подготовить cmd.exe для работы с python так же, как они?

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Я подозреваю, что это потому, что Anaconda Prompt - это просто какой-то странный ярлык, который устанавливает некоторые переменные для cmd.exe

Да, это в значительной степени,Так что нет, я не думаю, что вы можете назвать это как предложено. Вероятно, есть способ манипулировать cmd.exe вручную, чтобы запустить его как сеанс Anaconda Prompt, но вместо этого я бы предложил попробовать ...

conda run

Не уверен, еслиэто будет работать в Windows, но возможно использовать conda run для выполнения в среде Conda. Это было введено (и до сих пор остается) в качестве экспериментальной функции в Conda v4.6 с явной целью дать возможность запускать что-либо в среде Conda без интерактивной активации.

Необходимое условие

Во-первых, вы, вероятно, должны проверить, что conda run работает в Windows. Давайте предположим, что ваш conda.exe расположен в

C:\Users\dream\Anaconda3\Scripts\conda.exe

Начните чистый cmd.exe сеанс, где conda не определено (т. Е. Не Anaconda Prompt). Затем попробуйте что-то вроде

C:\Users\dream\Anaconda3\Scripts\conda.exe run where python

или, если у вас есть другой env, скажем my_env, вы также можете сделать

C:\Users\dream\Anaconda3\Scripts\conda.exe run -n my_env where python

, чтобы убедиться, что запускается интерпретатор Pythonуказано.

(возможно) Решение

Если вышеприведенное сработает, то вы сможете сделать что-то вроде

var exec = require('child_process').exec;
exec('C:\Users\dream\Anaconda3\Scripts\conda.exe run python hello.py', ..callback)

Не уверен, что вам понадобится оболочкауказано в этом случае.

1 голос
/ 18 октября 2019

Я не думаю, что вы хотите вызвать Anaconda.

Просто вызовите python: python print('hello').

Что произойдет в командной строке, если вы позвоните: Anaconda Prompt (Anaconda3) print('hello')?

(Это должен быть комментарий, но я не могу комментировать.)

...