升级python而不打破yum

时间:2012-05-16 18:30:21

标签: python centos yum

我最近通过从源代码编译在CentOS机器上安装了Python 2.7.3。 Python 2.7.3安装在/opt/python2.7上,当我安装它时,我只是将/ usr / bin / python更改为指向新版本。这显然是错误的,因为当我这样做时它打破了百胜。我会得到以下内容。

There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

   No module named yum

Please install a package which provides this module, or
verify that the module is installed correctly.

It's possible that the above module doesn't match the
current version of Python, which is:
2.7.3 (default, May 15 2012, 17:45:42) 
[GCC 4.4.4 20100726 (Red Hat 4.4.4-13)]

If you cannot solve this problem yourself, please go to 
the yum faq at:
  http://yum.baseurl.org/wiki/Faq

我将/ usr / bin / python更改为指向python 2.6.6,但现在2.6.6是python的默认版本。知道如何解决这个问题吗?

10 个答案:

答案 0 :(得分:134)

关于如何在CentOS 6和CentOS 7上安装最新版本的Python 2和Python 3,我编写了quick guide。它目前涵盖了Python 2.7.13和Python 3.6.0。

您不应该更改Python的系统版本,因为它会破坏系统(正如您所发现的那样)。只要保留原始系统版本,安装其他版本就可以正常工作。这可以通过在运行configure时使用自定义前缀(例如/usr/local)以及在安装Python构建时使用make altinstall(而不是普通make install)来实现。

只要您记得键入包括版本号的全名(例如“python2.7”或“pip2.7”),就可以使用多个版本的Python。如果您使用virtualenv完成所有Python工作,则会为您处理版本控制,因此请确保安装并使用virtualenv!

答案 1 :(得分:15)

vim `which yum`
modify #/usr/bin/python to #/usr/bin/python2.4

答案 2 :(得分:5)

/opt/python2.7/bin放在PATH前面的/usr/bin环境变量中......或者只是习惯于输入python2.7

答案 3 :(得分:2)

pythonz,一个pythonbrew的活跃分支,使这变得轻而易举。您可以安装以下版本:

# pythonz install 2.7.3

然后用:

设置符号链接
# ln -s /usr/local/pythonz/pythons/CPython-2.7.3/bin/python2.7 /usr/local/bin/python2.7
# python2.7 --version
Python 2.7.3

答案 4 :(得分:1)

ln -s /usr/local/bin/python2.7 /usr/bin/python

答案 5 :(得分:0)

如果您想试用rpm包,可以安装 基于最新的Fedora rpms的二进制包,但重新编译 对于RHEL6 / CentOS6 / ScientificLinux-6:

http://www.jur-linux.org/download/el-updates/6/

最好的问候,

Florian La Roche

答案 6 :(得分:0)

我读了一篇带有注释的文章,指出以下命令现在可以运行。我没有测试过自己,所以要小心。

$ yum install -y epel-release
$ yum install -y python36

答案 7 :(得分:0)

好的,对我来说,已修复的错误是当安装了不同版本的python且yum找不到某个.so文件并引发异常时。
yum根据错误要求2.7.5。

print(df_unique)
   Variable  DistinctCount
0    Gender              2
1  Function              2
2   Segment              2

对我来说,此修复程序是将/ lib64附加到LD_LIBRARY_PATH环境变量中。 相关内容是/lib64/python2.7和/lib64/python3.6。

which python gives me /usr/bin/python
python --version gives me 2.7.5

为我修复了安装了多个python版本的yum错误。

答案 8 :(得分:0)

Daniel的answer可能是最理想的选择,因为它不涉及更改OS文件。但是,我发现自己处于一种需要第三方程序通过调用usr/bin/python来调用python的情况,但是需要Python 2.7.16,而默认的Python是2.7.5。这意味着我必须将usr/bin/python指向2.7.16版本的Python版本,这意味着yum无法正常工作。

我最终要做的是编辑文件/usr/bin/yum并替换其中的shebang以使用系统默认的Python(对我而言,这意味着将#! /usr/bin/python更改为#! /usr/bin/python2)。但是,在运行yum之后,出现了一个错误:

ImportError: No module named urlgrabber.grabber

我通过与/usr/libexec/urlgrabber-ext-down中相同的方式替换了/usr/bin/yum中的shebang来解决了这一问题。即#! /usr/bin/python#! /usr/bin/python2。之后yum开始工作。

这是一个技巧,应谨慎使用。如其他评论所述,修改OS文件应仅是最后的选择。

答案 9 :(得分:-1)

我建议更新相关脚本中的路径 (例如/ usr / bin / yum)指向你以前的Python作为解释器。

理想情况下,您希望升级yum及其关联的脚本以便它们 默认的Python安装支持。

如果无法做到这一点,上述内容完全可行并经过测试。

变化:

#!/usr/bin/python

到你的旧版本的路径,直到你可以做到 在百胜之上。

如果您有一台隔离的机器,那么您无法执行上述操作的情况 没有时间手动升级rpm或暂时无法连接 或永久保存到标准的yum存储库。