60

我最近通过从源代码编译在 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 的默认版本。知道如何解决这个问题吗?

4

10 回答 10

144

我写了一份关于如何在 CentOS 6 和 CentOS 7 上安装最新版本的 Python 2 和 Python 3的快速指南。它目前涵盖 Python 2.7.13 和 Python 3.6.0:

# Start by making sure your system is up-to-date:
yum update
# Compilers and related tools:
yum groupinstall -y "development tools"
# Libraries needed during compilation to enable all features of Python:
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel expat-devel
# If you are on a clean "minimal" install of CentOS you also need the wget tool:
yum install -y wget

后续步骤取决于您安装的 Python 版本。

对于 Python 2.7.14:

wget http://python.org/ftp/python/2.7.14/Python-2.7.14.tar.xz
tar xf Python-2.7.14.tar.xz
cd Python-2.7.14
./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"
make && make altinstall

# Strip the Python 2.7 binary:
strip /usr/local/lib/libpython2.7.so.1.0

对于 Python 3.6.3:

wget http://python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz
tar xf Python-3.6.3.tar.xz
cd Python-3.6.3
./configure --prefix=/usr/local --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"
make && make altinstall

# Strip the Python 3.6 binary:
strip /usr/local/lib/libpython3.6m.so.1.0

要安装 Pip:

# First get the script:
wget https://bootstrap.pypa.io/get-pip.py

# Then execute it using Python 2.7 and/or Python 3.6:
python2.7 get-pip.py
python3.6 get-pip.py

# With pip installed you can now do things like this:
pip2.7 install [packagename]
pip2.7 install --upgrade [packagename]
pip2.7 uninstall [packagename]

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

只要您记得输入包含版本号的全名(例如“python2.7”或“pip2.7”),拥有多个可用的 Python 版本通常不是什么大问题。如果您从 virtualenv 完成所有 Python 工作,则版本控制会为您处理,因此请确保您安装并使用 virtualenv!

于 2012-06-25T20:30:08.543 回答
14
vim `which yum`
modify #/usr/bin/python to #/usr/bin/python2.4
于 2013-05-15T04:59:20.757 回答
5

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

于 2012-05-16T18:34:30.847 回答
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
于 2012-11-05T11:50:38.077 回答
1
ln -s /usr/local/bin/python2.7 /usr/bin/python
于 2014-12-28T04:11:19.803 回答
0

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

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

对我来说,解决方法是将 /lib64 附加到 LD_LIBRARY_PATH 环境变量中。相关内容为/lib64/python2.7和/lib64/python3.6。

export LD_LIBRARY_PATH=/lib64:$LD_LIBRARY_PATH

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

于 2020-01-28T14:40:04.127 回答
0

丹尼尔的答案可能是最理想的答案,因为它不涉及更改操作系统文件。但是,我发现自己需要一个通过调用来调用 python 的 3rd 方程序usr/bin/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. 即,#! /usr/bin/python#! /usr/bin/python2。之后yum工作。

这是一个 hack,应该小心使用。正如其他评论中提到的,修改操作系统文件应该是最后的手段。

于 2020-11-22T20:20:35.880 回答
-1

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

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

此致,

弗洛里安·拉罗什

于 2013-05-03T16:13:25.547 回答
-1

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

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

如果那是不可能的,以上是完全可行和经过测试的。

改变:

#!/usr/bin/python

无论您的旧版本的路径是什么,直到您可以进行上述 yum 改进。

如果您有一台独立的机器,没有时间手动升级 rpm 或无法临时或永久连接到标准 yum 存储库,则您无法执行上述操作。

于 2012-09-10T21:59:39.320 回答
-2

我读了一篇评论,指出现在可以运行以下命令。我没有测试过自己,所以要小心。

$ yum install -y epel-release
$ yum install -y python36
于 2019-04-07T06:18:30.133 回答