我正在使用基本的 Ansible Playbook 在 Ubuntu 18.04 系统上安装一些 Python 软件包。为了进行演示,请使用以下示例剧本
test.yml
。
---
- name: Installing demo package.
hosts: localhost
tasks:
- name: Installing with pip.
pip:
name:
- "numpy"
virtualenv: "venv"
virtualenv_python: python3.6
我使用
python3 -m venv venv
安装了虚拟环境并使用source venv/bin/activate/
激活它。但是,如果我运行 ansible-playbook test.yml
,我会收到以下错误:
fatal: [localhost]: FAILED! => {"changed": false, "cmd": "venv/bin/pip install numpy", "msg": "[Errno 2] No such file or directory", "rc": 2}
错误分析:
我从这个相关问题运行了几个命令。
ansible localhost -a "which pip"
返回:
localhost | SUCCESS | rc=0 >>
/home/mydir/venv/bin/pip
我尝试使用
ansible localhost -m shell -a "hash -r"
清除哈希并获得
localhost | SUCCESS | rc=0 >>
之后,
ansible localhost -m shell -a "type pip""
返回:
localhost | SUCCESS | rc=0 >>
pip is /home/mydir/venv/bin/pip
但是,尽管我可以在 shell 中使用
venv/bin/pip install numpy
安装 numpy 而不会受到任何干扰,但问题仍然存在。
Ansible 的版本是 2.5.1。
从
virtualenv: "venv"
评估的实际路径可能与您的预期不同。一旦您拥有了现有的 virtualenv,那么您就可以更明确地说服 Ansible 使用它:使用 pip 模块的 executable
参数而不是 virtualenv
。
---
- name: Installing demo package.
hosts: localhost
tasks:
- name: Installing with pip.
pip:
name:
- "numpy"
executable: /home/mydir/venv/bin/pip