如何在NPM安装期间使用不同版本的python?

Nas*_*ade 210 python centos node.js npm

我有终端访问VPS运行centos 5.9和默认python 2.4.3安装.我还通过以下命令安装了python 2.7.3 :(我用的是make altinstall代替make install)

wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
tar -xf Python-2.7.3.tgz
cd Python-2.7.3
./configure
make
make altinstall
Run Code Online (Sandbox Code Playgroud)

然后我通过这些命令从源安装了node.js:

python2.7 ./configure
make
make install
Run Code Online (Sandbox Code Playgroud)

问题是,当我使用npm install并尝试安装需要python> 2.4.3的node.js包时,我收到此错误:

gyp ERR! configure error
gyp ERR! stack Error: Python executable "python" is v2.4.3, which is not supported by gyp.
gyp ERR! stack You can pass the --python switch to point to Python >= v2.5.0 & < 3.0.0.
gyp ERR! stack     at failPythonVersion (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:125:14)
gyp ERR! stack     at /usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:114:9
Run Code Online (Sandbox Code Playgroud)

如何"将--python开关传递给Python> = v2.5.0"

ack*_*ack 481

您可以--python像这样使用npm选项:

npm install --python=python2.7
Run Code Online (Sandbox Code Playgroud)

或将其设置为始终使用:

npm config set python python2.7
Run Code Online (Sandbox Code Playgroud)

Npm将在需要时将此选项传递给node-gyp.

(注意:我是那个在Github上打开一个问题的人,因为有很多关于它的问题;-))

  • 这应该是公认的答案.`npm config set python python2.7`是*权威*解决方案 (34认同)
  • 因为我有python3作为全局,我需要设置python27使用:>这个npm配置设置python C:\ Python27\python.exe (10认同)
  • 对于使用Python 3的`pyenv`,我使用了`npm install --python =/usr/bin/python` (5认同)
  • 当然,如果 `python2` 在你的 $PATH 上,一定要使用它:-) (2认同)
  • 请注意,您还可以指定要使用的 Python 版本的路径。如果您安装了同一 Python 版本的多个版本,这很有用:“npm config set python /path/to/executable/python2.7” (2认同)
  • “--python=python3”标志和“npm config set python python3”都不适合我。我的NPM坚持使用Python 2进行安装。也许全局 NPM 包有所不同?有没有人有幸采用另一种方法? (2认同)

San*_*ame 53

在运行npm install之前将python设置为python2.7

Linux的:

export PYTHON=python2.7
Run Code Online (Sandbox Code Playgroud)

视窗:

set PYTHON=python2.7
Run Code Online (Sandbox Code Playgroud)

  • 在Windows上使用`set PYTHON = python2.7` (7认同)
  • `export`用于设置环境变量,变量适用于shell及其子进程. (4认同)
  • 当需要加载某个 python3 环境时,这是一个坏主意。在这种情况下,python2.7 仅用于 npm,因此仅将其设置为 npm 而不是在不知道您在做什么的情况下为您的整个 shell 环境设置。 (2认同)

Dav*_* L. 33

对于Windows用户,这样的东西应该工作:

PS C:\angular> npm install --python=C:\Python27\python.exe
Run Code Online (Sandbox Code Playgroud)

  • 这可以与接受的答案结合使用:`npm config set python C:\ Python27\python.exe` - 我刚刚做了这个并且它工作正常,这意味着每次你想要安装时都不必这样做. (7认同)
  • 如果您使用 Git Bash,则需要转义反斜杠:`npm install --python=C:\\Python27\\python.exe`。 (2认同)

vmx*_*vmx 7

好的,所以你已经找到了解决方案.只是想多次分享对我有用的东西;

我创建了setpy2别名,帮助我切换python.

alias setpy2="mkdir -p /tmp/bin; ln -s `which python2.7` /tmp/bin/python; export PATH=/tmp/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

执行setpy2之前运行npm install.在您退出终端之前,交换机一直有效,之后python又恢复到系统默认状态.

您也可以将此技术用于任何其他命令/工具.


小智 7

如果您在路径上没有 python或想要指定目录,此方法效果更好:

//for Windows
npm config set python C:\Python27\python.exe

//for Linux
npm config set python /usr/bin/python27
Run Code Online (Sandbox Code Playgroud)