pip安装错误:/usr/local/opt/python/bin/python2.7: 解释器错误:找不到该文件或目录

114

我不知道问题出在哪里,但我一直困扰于一些 Stack Overflow 的解决方案,但似乎没有任何进展。你能帮我看看吗?

  Monas-MacBook-Pro:CS764 mona$ sudo python get-pip.py
    The directory '/Users/mona/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
    The directory '/Users/mona/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
    /tmp/tmpbSjX8k/pip.zip/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
    Collecting pip
      Downloading pip-7.1.0-py2.py3-none-any.whl (1.1MB)
        100% |████████████████████████████████| 1.1MB 181kB/s 
    Installing collected packages: pip
      Found existing installation: pip 1.4.1
        Uninstalling pip-1.4.1:
          Successfully uninstalled pip-1.4.1
    Successfully installed pip-7.1.0
    Monas-MacBook-Pro:CS764 mona$ pip --version
    -bash: /usr/local/bin/pip: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory
22个回答

176

我曾经使用自制软件在OS X 10.10上安装Python 2.7,但新的安装缺少符号链接。我运行了以下命令:

brew link --overwrite python

在Homebrew中创建Python软链接问题中所提到的,它解决了这个问题。


7
那救了我。顺带一提,我必须执行三个步骤才能在El Capitan上修复我的Python: brew install python; brew linkapps python; brew link --overwrite python. - Saish
3
反转:酿造 取消链接 python - Anders B
2
只是补充一下。我发现我不知道为什么必须运行“xcode-select --install”。在我执行这个命令之前,“brew reinstall python”无法工作。在我的特定情况下,我使用迁移助手从一台物理计算机移动到另一台计算机。在完成这两件事之后,一切都解决了,pip3也可以正常工作了。 - chrisallick
3
Python对我来说已经正确链接了,有帮助的是如@Excalibur在评论中指出的pip3 install --upgrade pip - retrovertigo
1
@retrovertigo 在执行上述解决方案后,pip3 install --upgrade pip 对我也起了作用。 - that_developer
显示剩余2条评论

65

我猜你可能有两个Python安装或两个pip安装,其中一个已经部分删除了。

为什么要使用sudo?理想情况下,您应该能够从用户帐户安装和运行所有内容,而不是使用root。如果您混合使用root和本地帐户,您更有可能遇到权限问题(例如,看到它关于“父目录不属于当前用户”的警告)。

如果你运行这个命令会得到什么结果?

$ head -n1 /usr/local/bin/pip

这将向您展示pip正在尝试使用哪个Python二进制文件。 如果它指向/usr/local/opt/python/bin/python2.7,那么请尝试运行以下命令:

$ ls -al /usr/local/opt/python/bin/python2.7
如果显示“找不到文件或目录”,则说明pip正在尝试使用已被删除的Python二进制文件。

接下来,请尝试以下方法:

$ which python
$ which python2.7

查看正在运行的Python二进制文件的路径。

由于看起来pip已经成功安装在某个地方,可能是/usr/local/bin/pip是较旧版本的pip的一部分,并且位于PATH上面。为了测试这一点,您可以尝试将无法正常工作的pip二进制文件移到其他位置(可能需要sudo):

$ mv /usr/local/bin/pip /usr/local/bin/pip.old

然后尝试再次运行pip --version命令。希望它能够选择正确的版本并成功运行。


很好的解释。顺便说一下:不得不调试安装在Mercurial上的语言包管理器以获取项目,这让我对所有那些计算机东西失去了信心。哎呀..现在又出现了一个新的Python错误:“AttributeError本地仓库”。 - nicolas
1
我有同样的问题,但即使按照这些说明操作,它仍然对我无效。PIP仍在使用错误的路径。还有其他方法可以解决这个问题吗? - Adam Starrh
6
我需要安装pip:sudo /usr/bin/easy_install pip - 在这里找到它:https://dev59.com/J4Xca4cB1Zd3GeqPNcla - Adam Starrh
问题在于,如果那是唯一安装的pip版本,那么你就没办法了。 - eco

57

仅适用于OSX及其变种的解决方案。

ln -s /usr/local/bin/python /usr/local/opt/python/bin/python2.7

1
尝试以流畅简单的方式呈现答案。 - TheExorcist
1
这可能会对使用Python的其他程序产生副作用。此外,Python 2的生命周期将于2020年1月1日结束,其开发人员已经表明最终(或在某些环境中已经)没有修饰符的“python”应该指的是Python 3。https://www.python.org/dev/peps/pep-0394/ - kotoole
2
@TheExorcist 很不幸,Python2和Python3是不同的编程语言。为其中一种语言编写的代码在另一种语言中运行时会出现错误。全面替换python为python2.7似乎很可能会在未来破坏其他应用程序。这个解决方案的“有效性”就像你忘记钥匙时删除前门的作用一样。它可以让你进入房子,但当你的房子开始充满虫子时,请不要哭泣。 - kotoole
这是软件开发人员和运维人员之间永恒的斗争的一个很好的例子......作为DevOps观看很有趣。 - eco
1
为避免这里讨论的问题,您可以执行“which python2.7”,然后将其输出作为第一个参数,而不仅仅是“python”。对我来说,它变成了ln -s /usr/bin/python2.7 /usr/local/opt/python/bin/python2.7 - jessica
显示剩余2条评论

47

修复 pip

针对此错误:

~/Library/Python/2.7/bin/pip: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory`

这个问题的根源是pip中硬编码的错误Python路径(这意味着更改$PATH等环境变量不会解决问题)。在最新版本的pip中,该路径不再是硬编码的,因此一个可能有效的解决方案是:

pip install --upgrade pip

当然,这个命令使用pip,所以它失败了并出现了相同的错误。

摆脱这个困境的方法:

  1. 运行which pip
  2. 在文本编辑器中打开该文件
  3. 将第一行从#!/usr/local/opt/python/bin/python2.7更改为例如#!/usr/local/opt/python2/bin/python2.7(注意路径中的python2),或更改为您机器上可用的Python解释器路径。
  4. 现在,运行pip install --upgrade pip(这会覆盖您的修改并让pip工作在最新版本,其中解释器问题应该已经修复)

修复virtualenv

对我而言,我首先从virtualenv遇到了完全相同的问题:

~/Library/Python/2.7/bin/virtualenv: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory`

这里的解决方案是运行

pip uninstall virtualenv
pip install virtualenv

如果运行该命令出现与 pip 相同的错误,请参见上文。


3
是的,在我的Mac OSX上安装了Python 2.7和3.6,然后升级到了3.6版本,我也遇到了这个问题。对我有效的解决方案是运行以下命令:pip3 install --upgrade pip - Excalibur
不行:pip Traceback(最近的调用最先出现): File"/usr/local/bin/pip",line7,in<module> from pip._internal import main ImportError:没有找到名为pip._internal的模块 - eco
@Excalibur,我在被接受的答案下面添加了你的解决方案作为评论。感谢你! - retrovertigo

27

我在安装时也犯了sudo的错误。(哎呀)

brew install python
brew linkapps python
brew link --overwrite python 

这使一切恢复到正常。


27
linkapps已被弃用。 - Steve

17

因为我在Mac OSX上安装了Python 2和3,所以出现了各种错误。

我使用which命令找到了我的Python 2.7文件的位置(/usr/local/bin/python2.7)。

which python2.7

然后,我使用符号链接将我的真实Python2.7安装位置与脚本所期望的位置链接起来:

ln -s /usr/local/bin/python2.7 /usr/local/opt/python/bin/python2.7

2
救命稻草!谢谢。 - Brian Fegter

15

我也遇到了类似的问题。基本上pip在错误的路径(旧的安装路径)或Python中查找。以下解决方法适用于我:

  • 我检查了Python的路径(尝试which python
  • 我检查了pip文件的第一行(/usr/local/bin/pip2.7/usr/local/bin/pip)。该行应声明正确的Python路径。在我的情况下,它没有。我进行了更正,现在它可以正常工作。

9
为了简化操作,我们可以使用以下命令重新安装2版本: brew install python@2 然后在我的Mac上,它看起来如下:
▶ python -V
Python 2.7.10

▶ python2 -V
Python 2.7.14

▶ python3 -V
Python 3.6.5

▶ pip2 -V
pip 9.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)

▶ pip3 -V
pip 9.0.3 from /usr/local/lib/python3.6/site-packages (python 3.6)

▶ pip --version
pip 9.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)

1
重新安装时,可以使用brew中的reinstall命令:brew reinstall python@2 - Valeriy Van

9

如果有人需要帮助,当我升级pip后它停止工作时,这个问题中提到的解决方案对我有效:Pip broken after upgrading

看起来这是一个问题,当以前缓存的位置发生变化时,你可以使用以下命令刷新缓存:

hash -r

5

我遇到了相同的问题,虚拟环境指向了旧的Python路径。修复路径即可解决问题:

$ virtualenv -p python2.7 env
-bash: /usr/local/bin/virtualenv: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory

$ which python2.7
/opt/local/bin/python2.7

# needed to change to correct python path
$ head  /usr/local/bin/virtualenv
#!/usr/local/opt/python/bin/python2.7 <<<< REMOVED THIS LINE
#!/opt/local/bin/python2.7 <<<<< REPLACED WITH CORRECT PATH

# now it works:
$ virtualenv -p python2.7 env
Running virtualenv with interpreter /opt/local/bin/python2.7
New python executable in env/bin/python
Installing setuptools, pip...done.

这个方法有效。但是它是否是长期解决方案呢?我发现还有其他几个问题也是这样,所以每次出现问题都需要更改,我对此的长期影响感到担忧。 - Jake T.
绝对不是长期解决方案。在我的情况下,我已经搞乱了我的Python环境,这就是为什么我认为它陷入了这种情况并寻找快速解决方案的原因。我怀疑卸载virtualenv然后使用功能齐全的python2.7 pip重新安装它会使其生效。 - d g

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