【问题标题】:Cannot upgrade sklearn, pip pointing to python3无法升级sklearn,pip指向python3
【发布时间】:2018-01-10 04:20:20
【问题描述】:

我想用 pip 在 python 2.7 中升级 sklearn,但我不能,因为一两天 pip 似乎指向 python 3.4,而不是 python 2.7:

> pip install -U scikit-learn
Requirement already up-to-date: scikit-learn in /home/kinkyboy/.local/lib/python3.4/site-packages
Cleaning up...

这显示了我当前的 pip* 命令:

> pip -V
pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.4)
> pip2 -V
pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7)
> pip3 -V
pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.4)

这表明python正在使用python 2.7:

> which python
python is /usr/bin/python
python is /home/kinkyboy/conda/bin/python
> ls -l /usr/bin/python
lrwxrwxrwx 1 root root 9 Jan  6  2016 /usr/bin/python -> python2.7*

我设法使用 pip2 升级了 sklearn,但是如何将 pip 指向 python 2.7?

更新: 我尝试了以下操作,但出现权限被拒绝错误。

> python -m pip install -U --force-reinstall pip
Collecting pip
  Using cached pip-9.0.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 9.0.1
    Uninstalling pip-9.0.1:
Exception:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/usr/local/lib/python2.7/dist-packages/pip/commands/install.py", line 342, in run
    prefix=options.prefix_path,
  File "/usr/local/lib/python2.7/dist-packages/pip/req/req_set.py", line 778, in install
    requirement.uninstall(auto_confirm=True)
  File "/usr/local/lib/python2.7/dist-packages/pip/req/req_install.py", line 754, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/usr/local/lib/python2.7/dist-packages/pip/req/req_uninstall.py", line 115, in remove
    renames(path, new_path)
  File "/usr/local/lib/python2.7/dist-packages/pip/utils/__init__.py", line 267, in renames
    shutil.move(old, new)
  File "/usr/lib/python2.7/shutil.py", line 303, in move
    os.unlink(src)
OSError: [Errno 13] Permission denied: '/usr/bin/pip'

即使我知道使用 sudo 不好(尽管我过去可能使用过),我尝试使用 sudo 运行相同的命令(它有效),我尝试给出 '/usr/bin/pip' 777权限(但它仍然没有帮助运行上面的正常卸载),我也做了一个 sudo uninstall python-pip (没有帮助上面的正常卸载)。经过这些尝试后,我将一切恢复原状。

【问题讨论】:

  • 您使用的是哪个操作系统?
  • linux mint,我忘记写了
  • 我已经在下面回答了你的问题,看看我的解决方案是否对你有帮助。
  • 谢谢,我今晚试试
  • 我认为 pip 将指向最后安装的版本。所以如果你想用pip作为pip2,只需重新安装pip2

标签: python python-2.7 pip


【解决方案1】:

我在 Homebrew 的存储库上发现了这个 GitHub 线程,有类似的问题:https://github.com/Homebrew/legacy-homebrew/issues/50607

显然,执行以下命令应该可以解决您的问题:

python3 -m pip install -U --force-reinstall pip
python -m pip install -U --force-reinstall pip

但您始终可以使用以下命令执行 pip:

python -m pip
python3 -m pip

【讨论】:

  • 不幸的是你的建议没有帮助,我更新了我的问题。是否有可能我在某个时候运行了一些 sudo pip install 并且把事情搞砸了?
  • 是的,如果您获得的权限被拒绝,您可能使用 sudo 安装了 pip、python 或(可能)某些扩展。检查您的/usr/bin/pip 权限以确认这一点。您可以使用sudo 删除并重新安装它。我真的不确定会产生什么后果。但正如我所说,您始终可以使用python -m pippython3 -m pip
【解决方案2】:

不确定您是如何更改它的,但如果您修改 /usr/bin/ 中 pip 文件的第一行(编辑:以及您已安装的任何其他 pip),您可以将其更改回来。以下假设您正在修改 /usr/bin/pip:

1.) 确保您拥有对 /usr/bin/pip 的写入权限,无论是作为 root 用户还是暂时使用 sudo chmod -c 757 /usr/bin/pip 更改权限。

2.) 将第一行 pip 从#!/usr/bin/python3(我假设正在显示)更新为#!/usr/bin/python

3.) 保存 pip 并将权限恢复为 755(如果您对其进行了更改)(这样就没有其他人会弄乱它了)。

我在更改之前/之后的输出:

$ pip -V
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.5)
$ pip -V
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)

在不确切知道它最初是如何更改的情况下,这将是我修复它的方法。否则,我的主要方法是找出首先触发它的原因并尝试扭转它。

【讨论】:

  • /usr/bin/pip 文件的第一行已经是#!/usr/bin/python 并且文件的权限是755,所以很遗憾这没有帮助
  • 我解决了这个问题,请参阅我自己的答案。如果您编辑答案以包含我的解决方案,我将很乐意接受它
  • 我刚刚阅读了您的回答,但更加困惑。您最终更改了 pip(您已经安装了几个),但令人惊讶的是,当您将其更改为 python3 时,它开始指向 python 2.7?我知道这就是你想要的,但 python3 应该指向 python 3.x 安装?无论如何我已经更新了我的答案,以防有多个安装。
  • 对不起,我把它改成了python(2.7)!我更正了我的答案
【解决方案3】:

在我的例子中,当我安装 sklearn 时,它默认指向 python3.5,我想将它与 python 2.7 一起使用。根据 Vitor 的建议,我运行了以下命令:

    sudo python -m pip install -U scikit-learn

它对我有用!

【讨论】:

    【解决方案4】:

    我受到@Idlehands 的初始答案的启发,以检查 python 的可执行文件是否以 #!/usr/bin/python3 开头。它没有。但是,pip 的可执行文件确实:

    > which pip
       pip is /usr/local/bin/pip
       pip is /usr/bin/pip
       pip is /home/kinkyboy/conda/bin/pip
    > diff /usr/local/bin/pip /usr/bin/pip3
       < #!/usr/bin/python3
    

    我将 #!/usr/bin/python3 更改为 #!/usr/bin/python,然后 pip -V 指向 python 2.7。

    sklearn 是最新的,我可以导入最新的模块(这是我一开始就想做的)。关于这一点:sklearn 是最新的可能已经发生了,因为我之前在 linux 中重新安装了 python-pip 并使用 sudo 等卸载了 pip,所以我并不完全肯定,如果没有所有这些围绕 sklearn 的探索,它会是最新的

    【讨论】:

      猜你喜欢
      • 2017-05-01
      • 2019-06-13
      • 2019-07-25
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多