【问题标题】:Pip suddenly using wrong version of PythonPip 突然使用了错误版本的 Python
【发布时间】:2016-07-18 14:30:21
【问题描述】:

在 os x 上遇到一个奇怪的 pip 问题。

据我所知(快速查看我的 .bash_history 似乎可以确认)我最近没有对我的配置进行任何更改。唉,pip 命令似乎突然使用了与以前不同的 python 版本。到目前为止,我使用命令 pip 来管理我的 python2 库和 pip3 由 python3 库管理。突然,任何运行 pip install 的尝试都会失败,并出现错误,例如缺少 print 语句周围的括号。

这是我试图找出问题的几个命令的结果:

which pip > /usr/local/bin/pip

which pip3 > /usr/local/bin/pip3

which python > /usr/local/bin/python

python version > Python 2.7.11

pip --version > pip 8.1.1 from /usr/local/lib/python3.5/site-packages (python 3.5)

所以出于某种原因,pip 命令似乎是从 PyPi2 数据库中运行的,但现在在 python3 中?任何想法如何解决这个问题?

【问题讨论】:

  • 是否有其他程序(如安装脚本)在您的 .bashrc 前添加了某些内容或将 pip 链接到 pip3?
  • 您运行的是什么版本的 OSX?你从哪里弄来的那条蟒蛇?自制?你确定你没有更新什么吗?
  • 这是可能的,但我在我的 .bash_profile 中看不到任何内容(并且没有 .bashrc)我每天运行 brew update 和 brew upgrade 。 OS X 版本是 10.11.4
  • 如果您在 Mac OS X 上并使用 brew 更新 python。它似乎淘汰了点子。它对我来说已经发生了不止一次。
  • @jcmiller11 请查看我的回答 stackoverflow.com/a/37586175/4988742 并让我知道这是否是原因。

标签: python macos pip


【解决方案1】:

我运行多个 Python 版本,因此也运行多个 pip 版本。

但是,每次更新 pip 时,都会将标准的 pip 命令替换为更新的版本。所以即使是pip3 install --upgrade pip 也会在你的系统中添加一个/usr/local/bin/pip,从而弄乱 Python 2 版本。

相反,我将 pip 作为(可执行)模块运行:

python3 -m pip search <package>

python2 -m pip search <package>

甚至

python3.5 -m pip search <package>

这保证了您的 pip 版本始终与您要使用的 Python 版本相匹配。它的打字时间有点长,但我更喜欢它的明确性(我猜,它遵循 Python 之禅)。

注意更新pip:

python3.5 -m pip install --upgrade pip

仍将在/usr/local/bin/pip 中安装 Python 3.5 版本,但我只是忽略了这一点。请注意直接执行pip 的(shell)脚本。

【讨论】:

  • +1 当系统上同时拥有 Python 2 和 3 时,这比担心会尝试隐式使用哪个版本的 Python pip 更好。应该是接受的答案恕我直言
  • 使用 python3 -m pip install 代替 python3 -m pip search 因为“pip search”已被贬值。有关更多信息,请参见 status.python.org。
  • @Peurke :建议将其作为编辑,而不是评论
【解决方案2】:

找到您要使用的 Python 的绝对路径:

which python

打开你的默认 pip 可执行脚本:

vi $(which pip)

你会在顶部看到一条 shebang 线,它可能指向错误的 Python(我也遇到过这种情况)。

指向你想要的 Python(见第 1 步),例如:

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

【讨论】:

  • 这对我不起作用。 pip 仍然有一些其他内部引用指向错误的 python 版本,fwiw。
  • 我的答案是基于我的本地设置,我会修复它。 @BishopZ 首先通过运行:“which pip”查看哪个 pip 是您的默认 pip。要查看您的 pip 正在使用哪个 python,请运行:“head -1 $(which pip)”此外,此修复可能无效,因为它在 2016 年对我有用,但从那时起 pip 发生了显着变化。
  • @BishopZ 我刚刚更新了答案,我测试了这些步骤,这些步骤对最近的点子(18.1 版)和 python 3.7 都有好处
  • @DmitryTokarev:但这里的问题就像其他答案之一一样,现在我做python3.7 -m pip -V,它会吐出pip version xx.xx for python 2.7,因此它毁了pip3.7,甚至可能成为用户的默认 pip3
  • 另外,为什么不将符号链接更新为/usr/local/bin/pip
【解决方案3】:

尝试通过在终端中运行以下命令来设置别名,

alias pip="/usr/local/bin/pip"
alias pip2="/usr/local/bin/pip"
alias pip3="/usr/local/bin/pip3"

如果这解决了您的问题,那么您需要在 bash 配置文件中添加别名。 更多信息请查看How do I create a Bash alias?

或者,您必须先使用python2 get-pip.py 重新安装pip,然后python3 get-pip.py get-pip.py 可以在这里下载https://bootstrap.pypa.io/get-pip.py

【讨论】:

  • 他们的问题是 /usr/local/bin/pip 现在已链接到 pip3,所以我认为您的解决方案行不通。
  • 他需要按照答案第二部分的建议重新安装 pip。
  • 重新安装 pip 是否需要我重新安装我使用 pip 安装的所有库?
【解决方案4】:

我也遇到了同样的问题!

我通过 brew brew reinstall python@2 重新安装 python2

重新安装后,pip install packagename 工作正常!

【讨论】:

  • 无论出于何种原因,我必须先做brew uninstall python@2,然后再做brew install python@2。重新安装无效。
【解决方案5】:

这些都不适合我,所以我所做的就是导航到

C:\Users(User)\AppData\Local\Programs\Python\

并删除了我没有使用的所有旧 python 版本。 (工作)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    相关资源
    最近更新 更多