无法升级sklearn,pip指向python3
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法升级sklearn,pip指向python3相关的知识,希望对你有一定的参考价值。
我想用pip在python 2.7中升级sklearn,但我不能,因为因为一天或两个点似乎指向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(没有帮助正常卸载上面)。在这些尝试之后,我把一切都恢复到原来的状态。
不知道你是如何改变它的,但如果修改/ usr / bin /中的pip文件的第一行(编辑:和你已安装的任何其他pip),你可以将其更改回来。假设您正在修改/ usr / bin / pip:
1.)确保您以root用户身份对/ usr / bin / pip具有写入权限,或者暂时使用sudo chmod -c 757 /usr/bin/pip
更改权限。
2.)从#!/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)
如果不知道它究竟是如何改变的,那将是我修复它的方法。否则,我的主要方法是弄清楚是什么先触发它并试图扭转它。
我在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
我受@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
它对我有用!
以上是关于无法升级sklearn,pip指向python3的主要内容,如果未能解决你的问题,请参考以下文章