Python 3 支持

Ansible 2.5 及以上版本支持 Python 3。在 2.5 版本之前,使用 Python 3 被视为技术预览版。本主题讨论如何配置您的控制节点和受管机器以使用 Python 3。

有关支持的具体版本,请参阅 控制节点要求受管节点要求

在控制节点端

在 Python 3 环境下运行 /usr/bin/ansible 最简单的方法是使用 Python3 版本的 pip 进行安装。这将使默认的 /usr/bin/ansible 以 Python3 运行

$ pip3 install ansible
$ ansible --version | grep "python version"
  python version = 3.10.5 (main, Jun 9 2022, 00:00:00) [GCC 12.1.1 20220507 (Red Hat 12.1.1-1)] (/usr/bin/python)

如果您运行的是 Ansible 从克隆的源码运行 devel 分支 且希望在源码检出中使用 Python 3,请通过 python3 运行命令。例如

$ source ./hacking/env-setup
$ python3 $(which ansible) localhost -m ping
$ python3 $(which ansible-playbook) sample-playbook.yml

注意

不同的 Linux 发行版软件包可能是为 Python2 或 Python3 打包的。当从发行版软件包运行程序时,您只能使用安装该软件时所对应的 Python 版本。有时发行版会提供安装多个 Python 版本的方法(通过单独的软件包或在安装后运行某些命令)。您需要检查您的发行版以确认此情况是否适用。

在受管机器上通过命令和剧本使用 Python 3

  • Ansible 会自动检测并在许多预装了 Python 3 的平台上使用它。要显式配置 Python 3 解释器,请在组或主机级别将 inventory 变量 ansible_python_interpreter 设置为 Python 3 解释器的路径,例如 /usr/bin/python3。默认解释器路径也可以在 ansible.cfg 中设置。

另请参阅

更多信息请参阅 解释器发现 (Interpreter Discovery)

# Example inventory that makes an alias for localhost that uses Python3
localhost-py3 ansible_host=localhost ansible_connection=local ansible_python_interpreter=/usr/bin/python3

# Example of setting a group of hosts to use Python3
[py3_hosts]
ubuntu16
fedora27

[py3_hosts:vars]
ansible_python_interpreter=/usr/bin/python3

另请参阅

更多信息请参阅 如何构建您的 inventory

  • 运行您的命令或剧本

$ ansible localhost-py3 -m ping
$ ansible-playbook sample-playbook.yml

请注意,您还可以在运行命令时使用 -e 命令行选项手动设置 Python 解释器。如果您想测试某个特定模块或剧本在 Python 3 下是否存在 Bug,这会非常有用。例如

$ ansible localhost -m ping -e 'ansible_python_interpreter=/usr/bin/python3'
$ ansible-playbook sample-playbook.yml -e 'ansible_python_interpreter=/usr/bin/python3'

发现不兼容情况时该怎么做

我们花费了多个版本的精力来修复 Bug 并增加新测试,以确保 Ansible 的核心功能集能在 Python 2 和 Python 3 下运行。然而,在极端情况下可能仍然存在 Bug,且随 Ansible 分发的许多模块由社区维护,并非所有模块都已完成迁移。

如果您在 Python 3 下发现 Bug,可以在 Ansible 的 GitHub 项目 上提交 Bug 报告。请务必在报告中提及 Python3,以便相关人员进行审阅。

如果您希望修复代码并在 GitHub 上提交拉取请求 (PR),可以参考 Ansible 与 Python 3,了解我们在 Ansible 代码库中修复常见 Python3 兼容性问题的方法。