如何从Python脚本安装npm包?

10 投票
2 回答
13076 浏览
提问于 2025-04-17 14:40

如何在Python脚本中安装npm包?

当我使用 subprocess.Popen(["node", "app.js"]) 时,一切正常
但是当我使用 subprocess.Popen(["npm", "install", "open"]) 时,就出现了错误

抱歉,今天谷歌和DuckDuckGo对我不太友好(

主要问题是——我需要自动在本地安装一些包,因为全局安装的包在Windows上不管用。

附言:我之所以要问这个问题,是因为我正在尝试为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脚本可以成功调用Node.js终端,但接下来会出现错误:
找不到npm模块
nodejs错误

2 个回答

2

在Windows系统上,很多Node.js的“可执行文件”其实后面都有一个.cmd的后缀。出于某种原因,当通过subprocess.Popen来调用这些文件时,它并不会自动识别这个后缀(尽管PATHEXT中可能包含了.cmd)。

所以,如果你想要一个正确的解决办法(而且不想用shell=True),可以在需要的Node.js可执行文件后面加上.cmd

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
5

shell 这个参数设置为 True

subprocess.Popen(["node", "npm", "install", "open"], shell=True)

撰写回答