linux上的两个python版本。如何将 2.7 设为默认值
Posted
技术标签:
【中文标题】linux上的两个python版本。如何将 2.7 设为默认值【英文标题】:Two versions of python on linux. how to make 2.7 the default 【发布时间】:2013-10-15 20:57:36 【问题描述】:我的 linuxbox 上有两个版本的 python:
$python
Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
$ /usr/local/bin/python2.7
Python 2.7.3 (default, Oct 8 2013, 15:53:09)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
$ which python
/usr/bin/python
$ ls -al /usr/bin/python
-rwxr-xr-x. 2 root root 4864 Jul 10 22:49 /usr/bin/python
如何将 2.7 设为默认版本,这样当我输入 python
时,它会将我置于 2.7?
【问题讨论】:
当我对我的 Fedora 执行此操作时,yum 或 apt-get 不再起作用。 @User:是的,我同样打破了一个古老的 Mandrake(将/usr/bin/env python
更改为 2.6 而不是 2.3 意味着 rpm
中的一半命令和所有 urpmi
停止工作)。
我已按照以下步骤在 Centos 5:1 上安装 Django,从源代码安装 Python 3.6。第二:在shell中输入以下命令“alias python=/usr/local/bin/python3.6”第三:运行以下命令安装Django“pip3 install Django”第四:“python -m django --version”验证Django 安装版本为“1.10.5”
对我来说 /usr/bin/python
是一个指向 python2
的软链接。我刚改成python3.6
【参考方案1】:
最简单的方法; 这三个命令会帮你设置,
Python 2.x 到 3.x
-
查看python版本,使用
python --version
(让你安装的是2.7.x)
找到 Python 3 的安装位置,使用which python3
(或which python
为您提供当前安装的python 版本)
最后一步,使用别名,alias python=/usr/bin/python3.6
(上一步中的一个)
现在,再次运行,python --version
,你会发现,3.6.x
已安装。
Python 3.x 到 2.x(几乎相同)
-
查看python版本,使用
python --version
(让你安装的是3.6.x)
找到 Python 2 的安装位置,使用which python2
(which python
为您提供当前 python 版本的安装位置。)
最后一步,使用别名,alias python=/usr/bin/python2.7
(你在上面的步骤中得到的)
现在,再次运行,python --version
,你会发现,2.x.x
已安装。
【讨论】:
【参考方案2】:通过以下方式验证当前 python 版本:
$ python --version
然后检查python是哪个文件的符号链接。
$ ll /usr/bin/python
输出示例:
lrwxrwxrwx 1 root root 9 Jun 16 2014 /usr/bin/python -> python2.7*
查看其他可用的python版本:
$ ls /usr/bin/python*
输出示例:
/usr/bin/python /usr/bin/python2.7-config /usr/bin/python3.4 /usr/bin/python3.4m-config /usr/bin/python3.6m /usr/bin/python3m
/usr/bin/python2 /usr/bin/python2-config /usr/bin/python3.4-config /usr/bin/python3.6 /usr/bin/python3.6m-config /usr/bin/python3m-config
/usr/bin/python2.7 /usr/bin/python3 /usr/bin/python3.4m /usr/bin/python3.6-config /usr/bin/python3-config /usr/bin/python-config
如果要将当前版本的python更改为3.6版本编辑文件~/.bashrc:
vim ~/.bashrc
在文件末尾添加以下行并保存:
alias python=/usr/local/bin/python3.6
为 python 3.6 安装 pip
$ sudo apt-get install python3.6 python3.6-dev
$ sudo curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python3.6
$ sudo easy_install pip
成功后,检查 pip 的当前版本:
$ pip3 -V
输出示例:
pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.6)
【讨论】:
【参考方案3】:输入命令
which python
//output:
/usr/bin/python
cd /usr/bin
ls -l
在这里你可以看到类似的东西
lrwxrwxrwx 1 root root 9 Mar 7 17:04 python -> python2.7
您的默认 python2.7 软链接到文本“python”
所以删除软链接python
sudo rm -r python
然后重试上面的命令
ls -l
你可以看到软链接被删除了
-rwxr-xr-x 1 root root 3670448 Nov 12 20:01 python2.7
然后为python3.6新建一个软链接
ln -s /usr/bin/python3.6 python
然后在终端尝试命令python
//output:
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
输入help
、copyright
、credits
或license
了解更多信息。
【讨论】:
您的帖子不是对 OP 问题的回答。 这为我解决了一个非常奇怪的问题。当我从 root 或普通终端检查 python 版本时,它显示 3.6.8 但如果我创建一个 .sh 并在里面输入 python -version,则打印 2.7。原来这是因为如上所述存在软链接。按照步骤操作,它已修复。谢谢。【参考方案4】:所有操作系统都带有一个默认版本的 python,它位于 /usr/bin 中。操作系统附带的所有脚本(例如 yum)都指向驻留在 /usr/bin 中的这个版本的 python。 当您想安装新版本的 python 时,您不想破坏可能无法与新版本的 python 一起使用的现有脚本。
这样做的正确方法是将python安装为备用版本。
e.g.
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2
tar xf Python-2.7.3.tar.bz2
cd Python-2.7.3
./configure --prefix=/usr/local/
make && make altinstall
现在通过这样做,像 yum 这样的现有脚本仍然可以与 /usr/bin/python 一起使用。 您的默认 python 版本将是安装在 /usr/local/bin 中的版本。 即当你输入 python 时,你会得到 2.7.3
发生这种情况是因为。 $PATH 变量在 usr/bin 之前有 /usr/local/bin。
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
如果python2.7仍然没有作为默认的python版本生效,你需要这样做
export PATH="/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
【讨论】:
【参考方案5】:您可能实际上并不想更改默认 Python。
您的发行版在/usr/bin
中安装了一个标准系统Python,并且可能有依赖于这个存在的脚本,并由#! /usr/bin/env python
选择。您通常可以在 2.7 中运行 Python 2.6 脚本,但您愿意冒险吗?
最重要的是,与/usr/bin
混在一起可能会破坏您的包管理器管理包的能力。更改PATH
中的目录顺序会影响除 Python 之外的许多其他事情。 (事实上,在/usr/bin
之前出现/usr/local/bin
更为常见,这可能是您真正想要的——但如果您反过来使用它,大概有一个很好的理由。)
但您不需要在键入python
时更改默认 Python 以使系统运行 2.7。
首先,你可以设置一个shell别名:
alias python=/usr/local/bin/python2.7
在提示符下输入,或者如果您希望更改保持不变,则将其放入您的 ~/.bashrc
,现在当 您 输入 python
时,它会运行您选择的 2.7,但是当某些您系统上的程序尝试使用 /usr/bin/env python
运行脚本,它运行标准 2.6。
或者,只需在 2.7 之外创建一个 virtual environment(或为不同的项目使用单独的 venv),然后在 venv 内完成您的工作。
【讨论】:
:( 你是对的。不幸的是,我已经根据@rohit 的回答创建了一个新的符号链接。现在我的yum
命令不起作用!我尝试创建符号链接但是它不起作用sudo ln -sf /usr/bin/python2.6 /usr/bin/python
任何解决方法?
@Anthony:我的猜测是/usr/bin/python
之前实际上并不是一个符号链接,它是一个包装脚本或可执行文件,现在你已经覆盖了它并且无法取回它。如果rpm
还在工作,你可以手动下载Python包安装,不用yum
。
当我输入 python2.6
时,我仍然可以使用 2.6 解释器,所以它仍然存在。
@Anthony:将来,如果有人告诉您更改 /usr/bin 中的内容(或 /usr/local 之外的任何地方),请记下那里的内容,并备份…
我把自己搞得一团糟!!我有另一个可能有那个脚本的 centos 盒子。如果我从那里复制它并将其放入此框的 /usr/bin 中。你认为它会起作用吗?【参考方案6】:
我猜你是手动安装了 2.7 版本,而 2.6 来自一个包?
简单的答案是:卸载python包。
比较复杂的是:不要在/usr/local中手动安装。构建一个2.7版本的包,然后升级。
包处理取决于您使用的发行版。
【讨论】:
发行版几乎肯定需要 Python 包。 CentOS 是基于 RPM 的,一半的 RPM 和 YUM 工具是用 Python 编写的。 亲爱的迈克尔,请建议卸载手动安装的python2.7的选项! 简单的解决方案是删除 /usr/local/ 下的所有内容,但这样您可以删除手动编译和安装的所有内容。没有很好的方法来跟踪哪些文件属于 /usr/local 中的哪些软件,因此通常不鼓励在那里安装任何东西。也许你那里只有 python。如果 /usr/local/bin 只包含 python 可执行文件,你很有可能删除不会破坏其他任何东西。 你永远不应该卸载 python。从我这里拿走这个。我做到了,它破坏了我的系统。许多应用程序都依赖它。这是非常不明智的。【参考方案7】:将/usr/local/bin
添加到您的PATH
环境变量中,在列表中比/usr/bin
更早。
通常这是在你的 shell 的 rc 文件中完成的,例如对于 bash,您可以将其放入 .bashrc
:
export PATH="/usr/local/bin:$PATH"
这将导致您的 shell 先在 /usr/local/bin
中查找 python
,然后再查找 /usr/bin
中的那个。
(当然,这意味着您还需要让/usr/local/bin/python
指向python2.7
- 如果还没有,您需要对其进行符号链接。)
【讨论】:
可能有必要适当地设置 PYTHONHOME / 如果它是由某些东西设置的,则取消它。 这并不像建议更改 /usr/bin 本身的解决方案那样危险......但我仍然认为这不是 OP 真正想要的。 从 Ubuntu 14.x 升级到 16.x 后这对我有帮助以上是关于linux上的两个python版本。如何将 2.7 设为默认值的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 上的 Python 2.7 上安装 Tensorflow?
Ubuntu 将Python从默认的2.7升级到3.* 版本