我正在尝试使用Node.js编译python脚本。python脚本包括我已安装的一些模块。我的python软件包管理器是Anaconda,因此我尝试在以下位置提供该{"shell":"path to anaconda prompt"}选项:
{"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设置了一些变量(快捷方式指向的位置)。
所以我的问题是:
我可以直接使用Node.js调用anaconda提示吗?pip也有外壳吗?
打包程序(pip,anaconda)如何使python可访问模块?->是否通过某些环境变量?
我可以像使用cmd.exe一样准备与Python一起使用的方法吗?
我怀疑这是因为Anaconda Prompt只是一些怪异的快捷方式,它为cmd.exe设置了一些变量
是的,仅此而已。所以,不,我不认为您可以按建议的那样称呼它。可能有一种方法可以cmd.exe手动操作以使其像Anaconda Prompt会话一样运行,但我建议尝试…
cmd.exe
不知道这是否可以在Windows中使用,但是可以conda run在Conda环境中使用它来执行。该功能是Conda v4.6中的一项实验功能(至今仍保留),其明确目的是使用户能够在Conda环境中运行某些内容而无需交互激活它。
conda run
首先,您应该测试一下conda run在Windows上是否可以运行。假设您conda.exe位于
conda.exe
C:\Users\dream\Anaconda3\Scripts\conda.exe
开始一个未定义的干净cmd.exe会话conda(即不是Anaconda Prompt)。然后尝试类似
conda
C:\Users\dream\Anaconda3\Scripts\conda.exe run where python
或者,如果您有另一个环境,说my_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)
不知道在这种情况下是否需要指定的外壳。