第 18 章 安装和使用动态编程语言
红帽提供了不同的编程语言,如 Python、PHP 和 Tcl/TK。使用他们来开发自己的应用程序和服务。
18.1. Python 简介
Python 是一种高级编程语言,支持多种编程模式,如面向对象、所需功能以及程序式范式。Python 具有动态语义,可用于通用编程。
使用 Red Hat Enterprise Linux 时,系统中安装的许多软件包(如提供系统工具、数据分析工具或 Web 应用程序的软件包)会使用 Python 编写。要使用这些软件包,您必须安装 python*
软件包。
18.1.1. Python 版本
两个不兼容的 Python 版本被广泛使用,即 Python 2.x 和 Python 3.x。RHEL 8 提供以下 Python 版本。
版本 | 要安装的软件包 | 命令示例 | 此后提供 | 生命周期 |
---|---|---|---|---|
Python 3.6 |
|
| RHEL 8.0 | 完整的 RHEL 8 |
Python 2.7 |
|
| RHEL 8.0 | 较短 |
Python 3.8 |
|
| RHEL 8.2 | 较短 |
Python 3.9 |
|
| RHEL 8.4 | 较短 |
Python 3.11 |
|
| RHEL 8.8 | 较短 |
Python 3.12 |
|
| RHEL 8.10 | 较短 |
有关支持长度的详情,请查看 Red Hat Enterprise Linux 生命周期 和 Red Hat Enterprise Linux 应用程序流生命周期。
3.9 之前的每个 Python 版本都在一个单独的模块中分发。Python 3.11 和 Python 3.12 作为非模块化 RPM 软件包的套件发布,包括 python3.11
和 python3.12
软件包。
您可以在同一 RHEL 8 系统上并行安装多个 Python 版本。
在安装、调用或与之交互时,始终指定 Python 版本。例如,在软件包和命令名称中使用 python3
而不是 python
。所有与 Python 相关的命令还必须包括版本,例如 pip3
,pip2
,pip3.8
,pip3.9
,pip3.11
, pip3.12
。
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
软件包中的 python3
或 python3.6
命令,或使用后续的 Python 版本。
不要从 RHEL 8 中删除 platform-python
软件包,因为其他软件包需要它。
18.1.2. Python 版本之间的显著区别
RHEL 8 中包含的 Python 版本在许多方面有所不同。
Python 绑定
python38
和 python39
模块以及 python3.11
和 python3.12
软件包套件不包括与为 python36
模块提供的系统工具(RPM、DNF、SELinux 等)相同的绑定。因此,在需要与基础操作系统或二进制兼容性的情况下,使用 python36
。在将系统绑定与各种 Python 模块的更新版本一起需要绑定的唯一实例中,请使用 python36
模块和通过 pip
安装到 Python 的 venv
或 virtualenv
环境中安装的第三方上游 Python 模块。
Python 3.11 和 Python 3.12 虚拟环境必须使用 venv
而不是 virtualenv
创建
RHEL 8 中的 virtualenv
工具由 python3-virtualenv
软件包提供,与 Python 3.11 和 Python 3.12 不兼容。尝试使用 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 或 Python 3.12 虚拟环境,请使用 python3.11 -m venv
或 python3.12 -m venv
命令,该命令使用标准库的 venv
模块。