Python 3 支持
Ansible 2.5 及更高版本支持 Python 3。在 2.5 之前,使用 Python 3 被认为是技术预览版。本主题讨论如何设置控制节点和受管机器以使用 Python 3。
有关支持的具体版本,请参阅 控制节点需求 和 受管节点需求。
在控制节点端
使用 Python 3 版本的 pip 安装 Ansible,这是在 Python 3 下运行 /usr/bin/ansible 的最简单方法。这将使默认的 /usr/bin/ansible 使用 Python 3 运行。
$ 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 发行版软件包可能针对 Python 2 或 Python 3 打包。从发行版软件包运行时,只能使用 Ansible 与其安装的 Python 版本一起使用。有时发行版会提供一种方法来为多个 Python 版本安装 Ansible(通过单独的软件包或在安装后运行的一些命令)。需要检查发行版,以了解这种情况是否适用。
在受管机器上使用 Python 3 执行命令和剧本
Ansible 将自动检测并使用许多随附 Python 3 的平台上的 Python 3。要显式配置 Python 3 解释器,请将
ansible_python_interpreter
清单变量设置为 Python 3 解释器的位置,例如 /usr/bin/python3。默认解释器路径也可以在ansible.cfg
中设置。
另请参阅
解释器发现 以了解更多信息。
# 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
另请参阅
如何构建清单 以了解更多信息。
运行命令或剧本
$ ansible localhost-py3 -m ping
$ ansible-playbook sample-playbook.yml
注意,在运行命令时,还可以使用 -e 命令行选项手动设置 Python 解释器。这在需要测试特定模块或剧本在 Python 3 下是否存在任何错误时很有用。例如
$ ansible localhost -m ping -e 'ansible_python_interpreter=/usr/bin/python3'
$ ansible-playbook sample-playbook.yml -e 'ansible_python_interpreter=/usr/bin/python3'
如果发现不兼容性该怎么办
我们在几个版本中一直努力修复错误并添加新的测试,以便 Ansible 的核心功能集可以在 Python 2 和 Python 3 下运行。但是,在边缘情况下可能仍然存在错误,并且许多与 Ansible 一起提供的模块由社区维护,而其中可能并非全部已移植。
如果在 Python 3 下运行时发现错误,可以在 Ansible 的 GitHub 项目 上提交错误报告。请务必在错误报告中提及 Python3,以便相关人员进行查看。
如果想修复代码并在 github 上提交拉取请求,可以参考 Ansible 和 Python 3,了解我们在 Ansible 代码库中修复常见 Python 3 兼容性问题的方法。