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 python2which 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

输入helpcopyrightcreditslicense 了解更多信息。

【讨论】:

您的帖子不是对 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?

python 2.7的安装

linux升级python到2.7版本

Ubuntu 将Python从默认的2.7升级到3.* 版本

在 Mac OS X 上的 python 2.7 和 python 3.5 之间切换

在 linux SUSE 或 RedHat 上,如何加载 Python 2.7