Ansible无法找到python模块

Ary*_*a N 4 python pip ansible

使用 ansible 在多个虚拟机上运行 docker swarm。
ansible 无法docker在远程机器上找到 python 模块,即使它已经安装。

运行剧本 sudo ansible-playbook -i inv2.py /etc/ansible/playbook.yml

错误信息:

fatal: [10.212.137.216]: FAILED! => {"changed": false, "msg": "Failed to import docker or docker-py - No module named requests.exceptions. Try `pip install docker` or `pip install docker-py` (Python 2.6)"}
Run Code Online (Sandbox Code Playgroud)

模块列表:

ubuntu@donald0:~$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
...
cryptography (2.1.4)
docker (3.7.1)
docker-pycreds (0.4.0)
...
Run Code Online (Sandbox Code Playgroud)

cod*_*ade 8

出现此错误是因为 Ansible 正在搜索您正在使用的 Python 模块的不同路径。

当您使用官方包安装 Ansible 时,它使用 Python 2.7,因此当您运行 Ansible 时,它​​将搜索 python 2 模块。

有很多方法可以解决这个问题:

- 添加ansible_python_interpreter设置正确 Python 路径的选项:

像下面的例子:

ansible-playbook -i inventory playbook.yml -e 'ansible_python_interpreter=/usr/bin/python3'
Run Code Online (Sandbox Code Playgroud)

- 使用 pip3 重新安装 ansible:

使用以下命令:

sudo apt remove ansible
pip3 install ansible
Run Code Online (Sandbox Code Playgroud)

我认为第二种选择是避免未来错误的最佳方法。

阅读有关 Ansible 的 Python 3 支持的更多信息:Ansible - Python 3 支持


Nav*_*ran 0

以下配置对我有用。它安装 docker、python 和 docker-compose 最新版本

---
- name: Checking docker on latest version
  apt: name=docker.io state=latest

- name: Checking python
  apt: name=python state=latest

- name: Checking docker-compose on latest version
  apt: name=docker-compose state=latest
Run Code Online (Sandbox Code Playgroud)