如何从python脚本安装npm包?
当我使用 subprocess.Popen(["node", "app.js"])
时,确定。
当我使用 subprocess.Popen(["npm", "install", "open"])
时,引发错误。
很抱歉,Google和DuckDuckGo今天不是我的朋友(
主要问题 - 我的小型实用程序需要自动本地安装所需的软件包,因为全局软件包无法在Windows中运行。
PS。我不得不问这个问题,因为我正在尝试为Sublime Text 2开发一个插件。
这是Sublime python控制台中的错误:
Reloading plugin …\stsync.py
Traceback (most recent call last):
File ".\sublime_plugin.py", line 103, in create_application_commands
cmds.append(class_())
File ".\stsync.py", line 16, in __init__
File ".\subprocess.py", line 633, in __init__
File ".\subprocess.py", line 842, in _execute_child
WindowsError: [Error 2]
第16行:subprocess.Popen(["node", "npm", "install", "open"])
如果我将第16行更改为 subprocess.Popen([“node”,“npm”,“install”,“open”])
然后python脚本将成功调用nodejs终端,但随后它将失败并出现错误:
cannot find npm module
答案 0 :(得分:2)
将shell
参数设置为True
subprocess.Popen(["node", "npm", "install", "open"], shell=True)
答案 1 :(得分:0)
在Windows上,许多Node.js"二进制文件"实际上后缀为.cmd
文件扩展名,无论出于何种原因,在subprocess.Popen
调用期间,它都不会扩展(即使PATHEXT
可能包含.cmd
)
因此,对于正确的解决方案(不使用shell=True
),请尝试将.cmd
附加到所需的Node.js二进制文件:
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.Popen(['npm.cmd', 'install'])
<subprocess.Popen object at 0x005E18B0>
>>> npm ERR! install Couldn't read dependencies
当然它会引发错误,因为我在该目录中没有package.json
。请尝试使用其他常用程序,例如webpack
:
>>> subprocess.Popen(['webpack'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
...
FileNotFoundError: [WinError 2] The system cannot find the file specified
哦,对了,加.cmd
:
>>> subprocess.Popen(['webpack.cmd'])
<subprocess.Popen object at 0x008A18B0>
>>> No configuration file found and no output filename configured via CLI option