繁体   English   中英

无法升级sklearn,点指向python3

[英]Cannot upgrade sklearn, pip pointing to python3

我想用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卸载python-pip(没有帮助上面的常规卸载)。 经过这些尝试,我将一切恢复了原样。

我在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

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

1.)确保您以root用户身份对/ usr / bin / pip拥有写权限,或者暂时使用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)

首先不知道确切的更改方式,这是我修复它的方式。 否则,我的主要方法是先找出是什么触发了它,然后尝试将其反转。

@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可能是最新的

就我而言,当我安装sklearn时,默认情况下它指向的是python3.5,我想在python 2.7中使用它。 根据Vitor的建议,我运行了以下命令:

    sudo python -m pip install -U scikit-learn

它为我工作!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM