在RHEL上安装Python 3

153

我正在尝试按照以下步骤在RHEL上安装Python3:

yum search python3
No matches found for: python3 的意思是没有找到与 "python3" 相关的匹配项。
yum search python

搜索结果中没有包含python3的内容。我接下来应该尝试什么?


我怀疑RHEL还没有包含Python 3。您可以尝试安装为Fedora构建的RPM包:https://admin.fedoraproject.org/pkgdb/acls/name/python3 - Thomas K
你也可以随时从源代码安装。 - Danica
在此记录Python 3.4的EPEL审核请求:https://bugzilla.redhat.com/show_bug.cgi?id=1219411。一旦问题得到解决,我(或其他人)将发布新答案,包含EPEL的详细信息。 - ncoghlan
3
Samuel Phan的回答使用社区yum仓库比从源代码构建更好,原因正如Samuel所述。您应该将已接受的答案更改为他的答案。 - Edward Ned Harvey
19个回答

255

从RPM安装通常更好,因为:

  • 你可以安装和正确卸载 Python3。
  • 安装时间更快。如果你在具有多个虚拟机的云环境中工作,则在每个虚拟机上编译Python3是不可接受的。

解决方案1:Red Hat和EPEL存储库

Red Hat通过EPEL存储库添加了以下内容:

  • CentOS 6的Python 3.4
  • CentOS 7的Python 3.6

[EPEL] 如何在CentOS 6上安装Python 3.4

sudo yum install -y epel-release
sudo yum install -y python34

# Install pip3
sudo yum install -y python34-setuptools  # install easy_install-3.4
sudo easy_install-3.4 pip

您可以使用pyvenv创建您的虚拟环境(virtualenv):

pyvenv /tmp/foo

[EPEL] 如何在CentOS 7上安装Python 3.6

在CentOS 7中,pip3.6已经作为一个软件包提供了 :)

sudo yum install -y epel-release
sudo yum install -y python36 python36-pip

您可以使用pyvenv创建您的虚拟环境

python3.6 -m venv /tmp/foo

如果您使用 pyvenv 脚本,将会收到一个警告:

$ pyvenv-3.6 /tmp/foo
WARNING: the pyenv script is deprecated in favour of `python3.6 -m venv`

解决方案二:IUS社区软件包库

IUS社区提供了一些适用于RHEL和CentOS的最新软件包。背后的人来自Rackspace,我认为他们非常值得信赖...

https://ius.io/

在这里选择适合您的正确存储库:

https://ius.io/setup

[IUS] 如何在CentOS 6上安装Python 3.6

sudo yum install -y https://repo.ius.io/ius-release-el6.rpm
sudo yum install -y python36u python36u-pip

您可以使用 pyvenv 创建您的虚拟环境

python3.6 -m venv /tmp/foo

[IUS] 如何在 CentOS 7 上安装 Python 3.6

sudo yum install -y https://repo.ius.io/ius-release-el7.rpm
sudo yum install -y python36u python36u-pip

您可以使用pyvenv创建您的虚拟环境

python3.6 -m venv /tmp/foo

1
修复了IUS发布包的URL。他们已经更新了版本,就这样。如果他们再次更新包,您可以从网页上检查他们的RPM链接。 - Samuel Phan
1
正如我所说,您回答中的链接包含不可打印的Unicode字符。当我复制/粘贴您的链接时,在VIM中看到以下内容:https://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/iu<200c><200b>s-release-1.0-14.iu‌​s.centos6.noarch.rpm这是Unicode字符: http://www.fileformat.info/info/unicode/char/200c/index.htm我的原始答案中的URL有效,我刚刚测试过。 - Samuel Phan
1
我被告知 IUS 社区软件包仓库不如软件集合可靠,因此我会在 CentOS 6 上采用 Mike Guerette 的回答 - bformet
2
使用这个解决方案,你将如何为Python34安装pip? - Loïc
1
非常好的问题,我为此添加了一条评论。这是我找到的最好的答案。如果您想坚持使用基于RPM的安装方式,您应该在CentOS 7上使用IUS存储库。它们提供了一个python34u-pip - Samuel Phan
显示剩余16条评论

205

手动安装Python很容易(即从源代码构建):

  1. 下载(在Python.org上可能有更新的版本):

 $ wget https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tar.xz
  • 解压缩

  •  $ tar xf Python-3.* 
     $ cd Python-3.*
    
  • 准备编译

  •  $ ./configure
    
  • 构建

  •  $ make
    
  • 安装

  •  $ make install
    

    或者,如果您不想覆盖python可执行文件(在某些发行版上更安全,比如RHEL6需要python是2.x),则可以通过 altinstall 安装python3.* 作为系统默认的并发实例:

     $ make altinstall
    

    如果你想要安装到另一个目录,可以在configure命令中添加参数--prefix

    例如:如果要将Python“安装”到/opt/local中,则只需添加--prefix=/opt/local

    make install步骤之后:为了使用新的Python安装,可能需要将[prefix]/bin添加到$PATH和[prefix]/lib添加到$LD_LIBRARY_PATH(取决于你传递的--prefix参数)。


    11
    你使用了命令:bzip2 -cd Python-3.2.2.tar.bz2 | tar xvf - 这个命令的简化版本是:tar jxvf Python-3.2.2.tar.bz2 - rajadhiraja
    2
    对我来说,生成的二进制文件名为python3.5,并位于此处: [root@machine python3.5]# which python3.5 /usr/local/bin/python3.5 因此,您可能希望添加一个符号链接以方便命名为python3 - Will
    8
    如果在安装Python时出现“在$PATH中找不到可接受的C编译器”的错误,请参考以下链接:https://dev59.com/p2Ij5IYBdhLWcg3w24kF。 - bnu
    7
    运行命令./configure --with-ensurepip=install可启用pip3,否则编译后将无法安装pip3 - Searene
    3
    在当今这个时代,IBM/Redhat都有软件仓库和一支工程师团队,我们却还需要从源代码进行编译和安装,这太荒谬了。为什么IBM和Redhat会讨厌Python呢?这太扯了。 - user10664542
    显示剩余10条评论

    33
    除了gecco的答案外,我会将第三步改为:

    除了gecco的回答外,我建议将第3步修改为:

    ./configure
    

    to:

    ./configure --prefix=/opt/python3
    

    安装完成后,您还可以:
    # ln -s /opt/python3/bin/python3 /usr/bin/python3
    

    这是为了确保安装不与使用yum安装的python发生冲突。

    以下是我在互联网上找到的说明:

    http://www.hosting.com/support/linux/installing-python-3-on-centosredhat-5x-from-source


    18
    为什么要使用 /opt 目录?事实上,/usr/local 目录就是专门用来存放此类软件的,默认情况下,如果在运行 ./configure 时没有显式指定 --prefix,那么安装程序会把软件安装到 /usr/local 目录下。 - cababunga
    @cababunga 正如我所写的,我受到了指定网站教程的影响。然而,以上述方式安装Python可能是可用的 - 卸载它将更容易(看起来make的卸载目标未提供)。此外,您可以在/opt下的指定单独目录中轻松安装各种版本的python3,并手动设置要使用或测试的版本。 - rsc
    您可能还想设置您的PATH以包含二进制文件夹。对我来说,它是 export PATH=$PATH:/opt/python3/bin - Caleb

    11

    现在,Red Hat软件集合中包括Python 3.4版本,除了Python 2.7和3.3。这些都适用于RHEL 6和7。

    RHSCL 2.0文档在https://access.redhat.com/documentation/en-US/Red_Hat_Software_Collections/

    还有很多文章可以在developerblog.redhat.com上找到。

    <opinion>使用SCL yum仓库可能比其他yum仓库更好,因为这些RPM是由Redhat开发/测试的(即第一方RPM而不是第三方)。</opinion>

    编辑

    按照说明在RHEL 6/7或CentOS 6/7上安装Python 3.4:

    # 1. Install the Software Collections tools:
    yum install scl-utils
    
    # 2. Download a package with repository for your system.
    #  (See the Yum Repositories on external link. For RHEL/CentOS 6:)
    wget https://www.softwarecollections.org/en/scls/rhscl/rh-python34/epel-6-x86_64/download/rhscl-rh-python34-epel-6-x86_64.noarch.rpm
    #  or for RHEL/CentOS 7
    wget https://www.softwarecollections.org/en/scls/rhscl/rh-python34/epel-7-x86_64/download/rhscl-rh-python34-epel-7-x86_64.noarch.rpm
    
    # 3. Install the repo package (on RHEL you will need to enable optional channel first):
    yum install rhscl-rh-python34-*.noarch.rpm
    
    # 4. Install the collection:
    yum install rh-python34
    
    # 5. Start using software collections:
    scl enable rh-python34 bash
    

    更新于2021-08-16:

    • 我相信现在默认情况下,rhelcentos的7个版本都已经升级到了python 3.6。
    • 截至2021年8月16日(尽管该问题仍在引用旧版本的python 3.4),SCL yum库中有python版本3.8。

    1
    // 这难道不需要我们启用特殊的 shell 吗?再加上虚拟环境,我可以看出这会变得非常麻烦。 - Nathan Basanese
    1
    // 为什么需要scl enable rh-python34 bash?这对以后使用有什么影响吗? - Nathan Basanese
    有没有办法在RedHat 6上安装Python3.5?我尝试了“wget https://www.softwarecollections.org/en/scls/rhscl/rh-python35/epel-6-x86_64/download/rhscl-rh-python35-epel-6-x86_64.noarch.rpm”,但是找不到该文件。 - Searene
    你必须订阅才能获取这些集合吗?那需要多少费用? - Noumenon
    1
    没有额外的费用。RH软件集合是所有RHEL开发者订阅和大多数RHEL订阅的一部分。可以从developers.redhat.com/download获取无费RHEL开发订阅。这些是真正的RHEL订阅 - 与生产授权相同的位 - 但是用于开发目的。 - Mike Guerette

    9
    使用SCL存储库。
    sudo sh -c 'wget -qO- http://people.redhat.com/bkabrda/scl_python33.repo >> /etc/yum.repos.d/scl.repo'
    sudo yum install python33
    scl enable python27
    

    (每次想要使用python27而不是系统默认版本时,都需要运行上述命令。)

    4
    阅读完红帽文档后,我需要做的是:要么使用scl enable python33 bash启动一个新的 shell,该 shell 将启用 Python 3;要么使用scl enable python33 'python hello.py'在当前 shell 中运行你的 Python 文件并使用 Python 3。 - stratagem
    //还有哪些通用的指令可以让Python 3.4的安装成为可能? - Nathan Basanese
    如果您使用的是RHEL,请使用Red Hat软件集合:subscription-manager repos --enable rhel-7-server-optional-rpms --enable rhel-server-rhscl-7-rpms。然后您可以运行 yum install rh-python36 命令进行安装。更多信息请参见如何在RHEL上安装Python 3 - Rob T.

    9

    //,怎么还没开始?Pip似乎是最简单的选择。 - Nathan Basanese

    9
    您可以从这里下载适用于RHEL6 / CentOS6的源码和二进制RPM包。这是从最新的Fedora开发源码到RHEL6 / CentOS6的后移版本。

    太好了。感谢你的努力,Florian。也许在那些目录上运行“createrepo”对一些人来说会更加有用。 - cababunga
    太好了,RPM安装完美。 - lyomi
    // 我们如何从该链接创建一个仓库? - Nathan Basanese
    // 我可以确认这个有效。等一下,我刚刚快速编写了一个使用该URL作为“baseurl”的东西:http://0bin.net/paste/hzxH+szmX+FvvQEU#pz+foVqLR2GfWIFW4nI+D07H0qsDgHSY-tGiZ7AZbK2 - Nathan Basanese

    8
    如果您使用的是RHEL,并且需要一款受Red Hat支持的Python,请使用Red Hat Software Collections(RHSCL)。EPEL和IUS软件包不受Red Hat支持。此外,以上许多答案都指向CentOS软件集合。虽然您可以安装它们,但它们不是RHEL的Red Hat支持软件包。
    此外,得票最高的答案给出了错误的建议 - 在RHEL上,您不应更改/usr/bin/python、/usr/bin/python2,因为这很可能会破坏yum和其他RHEL管理工具。看一下/bin/yum,它是一个以#!/usr/bin/python开头的Python脚本。如果您从源代码编译Python,请勿以root身份运行make install。那将覆盖/usr/bin/python。如果您破坏了yum,恢复系统可能会很困难。

    更多信息请参见在RHEL上安装Python 3、pip、venv、virtualenv和pipenv,网址为developers.redhat.com。该文档涵盖了从RHSCL安装和使用Python 3,使用Python虚拟环境以及一些有关软件集合和在RHEL上使用Python的技巧。

    简而言之,要通过Red Hat软件集合安装Python 3.6:

    $ su -
    # subscription-manager repos --enable rhel-7-server-optional-rpms \
       --enable rhel-server-rhscl-7-rpms
    # yum -y install @development
    # yum -y install rh-python36
    
    # yum -y install rh-python36-numpy \
       rh-python36-scipy \ 
       rh-python36-python-tools \
       rh-python36-python-six
    

    要使用软件集合,您需要启用它:

    scl enable rh-python36 bash
    

    如果您想永久启用Python 3,则可以将以下内容添加到您的~/.bashrc文件中,然后注销并重新登录。现在Python 3已永久添加到您的路径中。

    # Add RHSCL Python 3 to my login environment
    source scl_source enable rh-python36
    

    注意:一旦您这样做,现在键入python将会给您Python 3.6而不是Python 2.7。
    请参阅上述文章以获取所有内容和更多详细信息。

    7

    我看到所有的回答要么是要求从源代码编译python3,要么是安装二进制RPM包。这里提供另一个答案,以启用EPEL(企业版Linux的附加软件包),然后使用yum安装python。以下是在RHEL 7.5(Maipo)上执行的步骤:

    yum install wget –y
    wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-XX.noarch.rpm # Verify actual RPM name by browsing dir over browser
    rpm –ivh epel-*.rpm
    yum install python36
    

    另请参见链接


    如果通过SCL的官方方式无法正常工作,那么这个方法非常有效。在安装pip3之后,可以使用以下命令进行补充安装: sudo yum install python34-setuptools - OSP
    链接现在是404。 - f01
    1
    @f01,链接可以正常工作,但您需要将XX替换为实际数字。 只需浏览https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/并搜索“epel-release-7-”。 截至今天(2021年07月09日),版本号为13(epel-release-7-13.noarch.rpm)。 - Fer B.

    5

    我曾经使用Python 2.7遇到过同样的问题。按以下步骤成功升级到3.6。 您还可以尝试以下方法-

    1. See before upgrading version is 2.x

      python --version
      Python 2.7.5
      
    2. Use below command to upgrade your python to 3.x version-

      yum install python3x

      replace x with the version number you want.

      i.e. for installing python 3.6 execute

      yum install python36
      
    3. After that if you want to set this python for your default version then in bashrc file add

      vi ~/.bashrc

      alias python='python3.6'
      
    4. execute bash command to apply the settings

      bash 
      
    5. Now you can see the version below

      python --version
      Python 3.6.3
      

    如果不添加第三方仓库(EPEL或IUS),此答案将无法正常工作。在RHEL中没有python36软件包。RHSCL软件包是rh-python36 - Rob T.

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接