【问题标题】:How to install npm package from python script?如何从 python 脚本安装 npm 包?
【发布时间】:2013-01-18 19:09:06
【问题描述】:

如何从 python 脚本安装 npm 包?

当我使用subprocess.Popen(["node", "app.js"])OK
当我使用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

【问题讨论】:

标签: python node.js sublimetext2 npm


【解决方案1】:

shell 参数设置为 True

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

【讨论】:

  • 除了使用shell=True还有其他选择吗?根据文档docs.python.org/2/library/…,使用 shell=True 是一种安全隐患,强烈建议不要使用它。
  • 您好,这个似乎不适合我?它给了我一些奇怪的错误
【解决方案2】:

在 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

【讨论】:

    猜你喜欢
    • 2013-01-10
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多