无法找到Python可执行文件“python”

47
我使用npm安装iconv时遇到以下错误:

iconv@2.1.0 install /root/Dropbox/nodeApps/nodeApp/node_modules/iconv node-gyp rebuild

需要注意的是,保留了HTML标签,请勿删除。
gyp ERR! configure error 
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack     at failNoPython (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:103:14)
gyp ERR! stack     at /usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:42:11
gyp ERR! stack     at F (/usr/local/lib/node_modules/npm/node_modules/which/which.js:43:25)
gyp ERR! stack     at E (/usr/local/lib/node_modules/npm/node_modules/which/which.js:46:29)
gyp ERR! stack     at /usr/local/lib/node_modules/npm/node_modules/which/which.js:57:16
gyp ERR! stack     at Object.oncomplete (fs.js:107:15)
gyp ERR! System Linux 3.8.0-19-generic
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /root/Dropbox/nodeApps/nodeApp/node_modules/iconv
gyp ERR! node -v v0.10.28
gyp ERR! node-gyp -v v0.13.0
gyp ERR! not ok 

npm ERR! iconv@2.1.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the iconv@2.1.0 install script.
npm ERR! This is most likely a problem with the iconv package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls iconv
npm ERR! There is likely additional logging output above.
npm ERR! System Linux 3.8.0-19-generic
npm ERR! command "node" "/usr/local/bin/npm" "i"
npm ERR! cwd /root/Dropbox/nodeApps/nodeApp
npm ERR! node -v v0.10.28
npm ERR! npm -v 1.4.10
npm ERR! code ELIFECYCLE
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /root/Dropbox/nodeApps/nodeApp/npm-debug.log
npm ERR! not ok code 0

尽管我已经安装了Python并可以在控制台中运行它:
# python
Python 2.7.3 (default, May  9 2014, 12:18:32) 
[GCC 4.8.2] on linux2

并在~/.bashrc中设置PATH

export PYTHONPATH=$PYTHONPATH:/Python-2.7.3
export PATH=$PATH:/Python-2.7.3

完成并且执行 . ~/.bashrc


问题是因为在ssh登录时没有加载~/.bashrc。我将PATH变量放到了~/.bash_profile中,现在没问题了。 - Maxim Yefremov
我在~/.zshrc中设置了PYTHON变量,但在重新启动iTerm后仍然出现错误,所以最终采用了这个符号链接hack: $ which python /usr/bin/python $ sudo ln -s /usr/bin/python /usr/local/bin/python - kwcto
7个回答

103

对于在Ubuntu 16.04上遇到此问题的任何人...
node-gyp无法使用Python 3.5.X,似乎这是16.04默认附带的版本。我在某个地方读到过16.04也应该同时附带Python2,但我在我的安装中找不到它。

我通过以下方式修复了上述问题:

apt-get update     
apt-get install python2.7    
ln -s /usr/bin/python2.7 /usr/bin/python 
现在当node-gyp寻找python时,它会找到你的Python2.7安装并正确加载。

现在当node-gyp寻找python时,它会找到你的Python2.7安装并正确加载。


你不能在bashrc中使用ln,因为它需要sudo访问权限。你如何永久地解决这个问题? - towi_parallelism
2
@towi_parallelism 您可以设置 PYTHON 环境变量。像这样设置:export PYTHON="$(which python2.7)"。当 node-gyp 在仅剩 5 个月的时间内被淘汰时,它仍然被锁定在 Python v2.7 上似乎相当愚蠢...... - starbeamrainbowlabs
1
我给这个答案点了赞。我使用的是Ubuntu 20.04,其中没有安装Python 2.7。主要的Python版本是3.8。我正在使用Angular CLI 9。在npm install之后,我遇到了这个错误:“import sys; print“%s.%s.%s”%sys.version_info [:3];”,并发现新版本的Python有语法变化。基于此,我安装了Python 2.7,并将npm配置的Python路径设置为2.7。之后它就可以工作了。 - Nirav Shah

11
在你的bash会话中,你可以直接输入python并获得有效的回复,在那里输入which python并注意python二进制文件的完整路径位置。将该位置放入你的PYTHONPATHPATH环境变量中,但在末尾不要包含python
例如,which python给我输出:
/usr/local/bin/python

所以我会写:

export PYTHONPATH=$PYTHONPATH:/usr/local/bin
export PATH=$PATH:/usr/local/bin

在我的~/.bashrc文件中。


-bash: :/usr/bin: No such file or directory - Green
请确保您使用sudo -s命令。 - manish kumar

11

有一种简单且安全的方式,将以下内容放入~/.bashrc~/.bash_aliases文件中:

alias python=python3

在文件中添加上述内容后,运行source ~/.bashrcsource ~/.bash_aliases

这个方法对我在Ubuntu系统上的问题有效。 查看原始回答这里


7

安装Python2.7。
apt install python2


2
在问题中明确说明了Python2.7已经安装并可以使用python命令在shell中运行。 - He3lixxx
我没有OP遇到的问题,但我看到了类似的情况,这个修复方法很有效。(在我的情况下,我使用的是Ubuntu系统,没有安装Python2。) - Eric Walker

3
我遇到了相同的问题。你可以这样解决它:
sudo apt install python2
npm config set python "/usr/bin/python2.7"

但是如果您不想降级Python3..

npm install -g node-gyp@latest
npm config set python "/usr/bin/python3.8"

2

有时候问题不仅与NPM有关,需要一种系统范围的解决方案。那么,只需为“python”创建一个系统范围的符号链接,指向您当前的python路径。

例如,对于我的Ubuntu 20设置(作为root用户):

ln -s /usr/bin/python3 /usr/bin/python

然后验证符号链接:

ls -l /usr/bin/python
lrwxrwxrwx 1 root root 16 Feb 19 13:55 /usr/bin/python -> /usr/bin/python3

除了你的答案之外,在我的情况下,需要使用Python2。我运行了sudo apt install python2 ,然后按照你所说的运行了 sudo ln -s /usr/bin/python2 /usr/bin/python - Jafar Amini

2

问题是由于在ssh登录时没有加载~/.bashrc导致的。我将PATH变量放入~/.bash_profile中,问题已经解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接