macOS终端可正常运行meyda但Python调用提示node不存在是什么原因
根本原因
这是GUI应用与终端Shell的PATH环境变量不一致导致的:
- meyda是基于Node.js开发的CLI工具,脚本开头默认声明
#!/usr/bin/env node,需要系统能找到node可执行文件才能运行 - Mac终端启动时会自动加载
~/.zshrc/~/.bash_profile等Shell配置文件,你安装Node.js时写入的Node路径已经被添加到终端的PATH变量里,所以终端直接调用meyda可以正常运行 - Spyder是GUI应用,通过启动台/快捷方式启动时不会加载Shell的配置文件,默认的PATH变量里没有Node.js的安装路径,因此env找不到node命令。你能正常调用cp是因为cp位于系统默认PATH覆盖的
/bin目录下。
验证方法
你可以在Python脚本中执行以下代码,对比输出和终端执行echo $PATH的结果,会发现Python环境的PATH缺少Node.js所在的目录:
import os print(os.environ['PATH'])
解决方案
方案1:直接指定Node全路径调用
先在终端执行which node获取Node可执行文件的完整路径,比如返回结果是/usr/local/bin/node,之后在Python中按以下格式调用即可:
import os os.system('/usr/local/bin/node /usr/local/bin/meyda --bs=256 --o=apagodis4.csv samples_training/DczN6842.wav rms')
方案2:Python脚本中手动补全PATH
在脚本开头将Node所在路径添加到当前Python进程的PATH环境变量中:
import os # 将终端执行which node得到的路径的上级目录替换到下方,比如which node返回/Users/xxx/.nvm/versions/node/v18/bin/node,就填/Users/xxx/.nvm/versions/node/v18/bin node_path = "/usr/local/bin" os.environ['PATH'] = node_path + ":" + os.environ['PATH'] # 之后正常调用meyda即可 os.system('/usr/local/bin/meyda -h')
方案3:从终端启动Spyder
直接在终端中输入spyder命令回车启动Spyder,此时Spyder会继承终端的PATH环境变量,运行脚本就不会找不到node。
内容的提问来源于stack exchange,提问作者Oortone
相关产品推荐
相关产品推荐

