pip安装/usr/local/opt/python/bin/python2.7:错误的解释器:没有这样的文件或目录

时间:2015-08-02 02:49:20

标签: python macos installation pip osx-mavericks

我不知道这笔交易是什么,但我遇到了一些无处可寻的stackoverflow解决方案。你能帮帮我吗?

  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

19 个答案:

答案 0 :(得分:42)

我猜你有两个python安装,或两个pip安装,其中一个已被部分删除。

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

如果你运行它会得到什么?

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

这将显示哪个python二进制文件pip正在尝试使用。如果它指向/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可能是较早在PATH上安装的pip的一部分。要对此进行测试,您可以尝试移动不起作用的pip二进制文件(可能需要sudo):

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

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

答案 1 :(得分:38)

仅OSX及其变体中的解决方案。

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

答案 2 :(得分:25)

我使用sudo为我的安装犯了同样的错误。 (糟糕)

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

这使一切恢复正常。

答案 3 :(得分:23)

修复点

对于此错误:

~/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(这会覆盖您的hack,并使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发出相同的错误,请参见上文。

答案 4 :(得分:12)

我有类似的问题。基本上pip正在查找错误的路径(旧安装路径)或python。以下解决方案对我有用:

  • 我检查了python路径的位置(尝试which python
  • 我检查了点子文件的第一行(/usr/local/bin/pip2.7/usr/local/bin/pip)。该行应该说明python路径的正确路径。在我的情况下,没有。我纠正了它,现在它工作正常。

答案 5 :(得分:9)

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

以前缓存的位置发生变化时似乎是一个问题,因此您可以使用以下命令刷新缓存:

hash -r

答案 6 :(得分:8)

因为我在Mac OSX上同时安装了python 2和python 3,所以遇到了各种各样的错误。

我用它来查找我的python2.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

答案 7 :(得分:8)

为了简化操作,我们可以使用以下命令重新安装版本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)

答案 8 :(得分:4)

我有同样的问题,virtualenv指向一个旧的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.

答案 9 :(得分:4)

我有同样的问题。我有Python 2.7&amp; 3.6安装。 Python 2.7有virtualenv工作,但在安装Python3之后,virtualenv一直在寻找版本2.7并且无法找到它。 做pip install virtualenv安装了virt3alenv的Python3版本。

然后,对于每个命令,如果我想使用Python2,我会使用virtualenv --python=python2.7 somecommand

答案 10 :(得分:1)

我遇到了同样的问题。如果我运行brew link --overwrite python2。还有zsh: /usr/local/bin//fab: bad interpreter: /usr/local/opt/python/bin/python2.7: no such file or directory

cd /usr/local/opt/
mv python2 python

解决了!现在我们可以使用python2版本结构。

=== 2018/07/25更新

当你的os python链接到python3时,有一种方便的方法可以使用python2版本fab。 .sh为你的命令。

# fab python2
cd /usr/local/opt
rm python
ln -s python2 python

# use the fab cli
...

# link to python3
cd /usr/local/opt
rm python
ln -s python3 python

希望这有帮助。

答案 11 :(得分:1)

在我的情况下,我决定从我的mac中删除自制的python安装,因为我已经通过MacPorts在我的mac上安装了另外两个版本的python。这导致了错误消息。

通过brew重新安装python解决了我的问题。

答案 12 :(得分:1)

编辑此文件的第一行对我有用:

MBP-de-Jose:~ josejunior$ which python3

/usr/local/Cellar/python/3.7.3/bin/python3

MBP-de-Jose:~ josejunior$

之前

#!/usr/local/opt/python/bin/python3.7

之后

#!/usr/local/Cellar/python/3.7.3/bin/python3

答案 13 :(得分:1)

您需要做的就是...关闭终端窗口,然后重新打开新窗口以解决此问题。

问题是,新的python路径未添加到bashrc中(无论是源代码还是新的终端窗口都可以)。

答案 14 :(得分:1)

对我来说,在centOS 7上 我不得不从/ bin中删除旧的pip链接,

rm /bin/pip2.7 
rm /bin/pip

然后与之重新链接

sudo ln -s  /usr/local/bin/pip2.7 /bin/pip2.7

然后如果

/usr/local/bin/pip2.7

可行,这应该可行

答案 15 :(得分:0)

sudo /usr/bin/easy_install pip

这个命令对我有用

答案 16 :(得分:0)

您可能有两个不同版本的Python和pip。

尝试:

pip2 install --upgrade pip然后是pip2 install -r requirements.txt

如果您使用的是Python新版本,则为pip3

答案 17 :(得分:0)

在路径a中找到的

TLDR: pip是符号链接,引用的位置不再包含可执行文件。您需要更新符号链接。

它有助于理解几件事。

  • 当您键入pythonpip之类的内容时,操作系统将搜索/etc/paths来查找该命令的关联可执行文件。您可以使用cat /etc/paths在那里看到所有内容。
  • 要确定外壳程序将使用的可执行文件的位置,请使用方便的命令which,您可以键入which pythonwhich pip。这将告诉您外壳将用于该命令的可执行文件的位置。
  • 这部分是关键。该位置可能是也可能不是实际的可执行文件,它可能是符号链接(symlink)。
  • /etc/paths包含/usr/local/bin是很常见的,/usr/local/bin也是一堆指向实际可执行文件的符号链接。不是可执行文件本身。
  • 如果符号链接引用位置的可执行文件不存在,则会出现类似bad interpreter: No such file or directory 的错误

话虽这么说,问题可能在于pip是一个符号链接,而链接的可执行文件可能不再存在于该位置。要解决此问题,请执行以下操作

  1. 找到可执行文件的位置-which pip(给出类似/usr/local/bin/pip的内容)
  2. 检查符号链接引用位置ls -l /usr/local/bin/pip | grep pip(给出类似pip -> /usr/local/opt/python@3.7/bin/pip3的信息)
  3. 检查可执行文件是否在引用位置ls /usr/local/opt/python@3.7/bin/pip3上(您遇到了这个问题,所以可能不存在)。
  4. 删除旧的符号链接rm -r /usr/local/bin/pip
  5. 如果在pip中使用homebrew来查找实际的/usr/local/opt可执行文件,则可以使用ls /usr/local/opt/ | grep python之类的东西来找到它。
  6. 为pip可执行文件添加正确的符号链接。 ln -s /usr/local/opt/python@3.7/bin/pip3 /usr/local/bin/pip

答案 18 :(得分:0)

这个错误通常在每次有 iOS 升级时弹出。试试

xcode-select --install

这将安装最新的 xcode 版本并修复它