Red Hat Training

A Red Hat training course is available for RHEL 8

第 19 章 安装和使用动态编程语言

红帽提供了不同的编程语言,如 Python、PHP 和 Tcl/TK。使用他们来开发自己的应用程序和服务。

19.1. Python 简介

Python 是一种高级编程语言,支持多种编程模式,如面向对象、所需功能以及程序式范式。Python 具有动态语义,可用于通用编程。

使用 Red Hat Enterprise Linux 时,系统中安装的许多软件包(如提供系统工具、数据分析工具或 Web 应用程序的软件包)会使用 Python 编写。要使用这些软件包,您必须安装 python* 软件包。

19.1.1. Python 版本

两个不兼容的 Python 版本被广泛使用,即 Python 2.x 和 Python 3.x。RHEL 8 提供以下 Python 版本。

表 19.1. RHEL 8 中的 Python 版本

版本要安装的软件包命令示例此后提供生命周期

Python 3.6

python3, python36

python3, python3.6, pip3, pip3.6

RHEL 8.0

完整的 RHEL 8

Python 2.7

python2

python2, pip2

RHEL 8.0

较短

Python 3.8

python38

python3.8, pip3.8

RHEL 8.2

较短

Python 3.9

python39

python3.9,pip3.9

RHEL 8.4

较短

Python 3.11

python3.11

python3.11, pip3.11

RHEL 8.8

较短

有关支持长度的详情,请查看 Red Hat Enterprise Linux 生命周期Red Hat Enterprise Linux 应用程序流生命周期

3.9 之前的每个 Python 版本都在一个单独的模块中分发。Python 3.11 作为非模块化 RPM 软件包的套件分发,包括 python3.11 软件包。

您可以在同一 RHEL 8 系统上并行安装多个 Python 版本。

重要

在安装、调用或与之交互时,始终指定 Python 版本。例如,在软件包和命令名称中使用 python3 而不是 python。所有与 Python 相关的命令还必须包含版本,如pip3pip2pip3.8pip3.9pip3.11

RHEL 8 中默认不提供未指定版本的 python 命令(/usr/bin/python)。您可以使用 alternatives 命令来配置它;有关说明,请参阅 配置未版本化的 Python

任何对 /usr/bin/python 的手动更改(除使用 alternatives 命令所做的更改外),在更新时可能会覆盖。

作为系统管理员,使用 Python 3 的原因如下:

  • Python 3 代表 Python 项目的主要开发方向。
  • 2020 年终止了对上游社区中的 Python 2 的支持。
  • 流行的 Python 库在上游社区支持 Python 2 支持。
  • Red Hat Enterprise Linux 8 中的 Python 2 的生命周期比较短,旨在方便客户过渡到 Python 3

对于开发人员,Python 3 与 Python 2 相比有以下优点:

  • Python 3 可让您更轻松地编写表达、可维护且正确的代码。
  • 使用 Python 3 编写的代码将具有更大的灵活性。
  • Python 3 具有新功能,包括 asyncio、f-strings、高级解包、仅关键字的参数和链的例外。

但是,传统的软件可能需要将 /usr/bin/python 配置为 Python 2。因此,没有与 Red Hat Enterprise Linux 8 一起分发的默认的 python 软件包,您可以选择使用 Python 2 和 3 来作为 /usr/bin/python,如 配置未版本化的 Python 中所述。

重要

Red Hat Enterprise Linux 8 中的系统工具使用由内部 platform-python 软件包提供的 Python 版本 3.6,它不适用于客户直接使用。对于 Python 3.6 ,建议您使用 python36 软件包中的 python3python3.6 命令,或使用后续的 Python 版本。

不要从 RHEL 8 中删除 platform-python 软件包,因为其他软件包需要它。

19.1.2. Python 版本之间的显著区别

RHEL 8 中包含的 Python 版本在许多方面有所不同。

Python 绑定

python38python39 模块以及 python3.11 软件包套件都不包括对为 python36 模块提供的系统工具(RPM、DNF、SELinux 等)的同样的绑定。因此,在需要与基础操作系统或二进制兼容性的情况下,使用 python36。在将系统绑定与各种 Python 模块的更新版本一起需要绑定的唯一实例中,请使用 python36 模块和通过 pip 安装到 Python 的 venvvirtualenv 环境中安装的第三方上游 Python 模块。

Python 3.11 虚拟环境必须使用 venv 而不是 virtualenv创建

RHEL 8 中的 virtualenv 工具由 python3-virtualenv 软件包提供,与 Python 3.11 不兼容。尝试使用 virtualenv 创建虚拟环境会失败,并显示以下错误消息:

$ virtualenv -p python3.11 venv3.11
Running virtualenv with interpreter /usr/bin/python3.11
ERROR: Virtual environments created by virtualenv < 20 are not compatible with Python 3.11.
ERROR: Use python3.11 -m venv instead.

要创建 Python 3.11 虚拟环境,请使用 python3.11 -m venv 命令,该命令使用标准库中的 venv 模块。