【问题标题】:How to configure Ansible for Python virtual environment?如何为 Python 虚拟环境配置 Ansible?
【发布时间】:2018-10-07 13:51:09
【问题描述】:

我目前正在尝试运行使用回调插件的剧本。 这个插件使用了一个名为 datadog 的模块:

import datadog

当我尝试运行 playbook 时,我收到一条错误消息:

ImportError: 没有名为 datadog 的模块

为了解决这个问题,我创建了一个 virtualenv,激活它并安装了 datadog 模块:

virtualenv ansible -p python2.7
source ./ansible/bin/activate
pip install datadog

然后当我启动 python 并导入模块时,一切都很好:

python --version

Python 2.7.15

import datadog
print datadog

<module 'datadog' from
'/Users/admin/code/venvs/ansible/lib/python2.7/site-packages/datadog/__init__.pyc'>

因此,我认为该模块使用得当。

但是,在启动 ansible playbook 时,错误仍然存​​在:

ansible-playbook -i ../../local/hosts.ini my_playbook.yml -e "ansible_python_interpreter=/Users/admin/code/venvs/ansible/bin/python" -vvv

ansible-playbook 2.6.3
  config file = /Users/admin/code/src/playbooks/ansible.cfg
  configured module search path = [u'/Users/admin/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/Cellar/ansible/2.6.3/libexec/lib/python2.7/site-packages/ansible
  executable location = /usr/local/bin/ansible-playbook
  python version = 2.7.15 (default, Jul 23 2018, 21:27:06) [GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)]
Using /Users/admin/code/src/playbooks/ansible.cfg as config file
Parsed /Users/admin/code/src/local/hosts.ini inventory source with ini plugin
statically imported: /Users/admin/code/src/playbooks/roles/security/tasks/security-ubuntu.yml
statically imported: /Users/admin/code/src/playbooks/roles/mariadb/tasks/cluster.yml
ERROR! Unexpected Exception, this is probably a bug: No module named datadog

据我所知,Ansible 没有考虑 virtualenv。我希望 Ansible 在 ansible python module location 中使用 virtualenv 的路径。

如何让 ansible 使用 virtualenv?我在 ansible 文档中没有找到与 python 路径相关的任何内容:https://docs.ansible.com/ansible/2.5/reference_appendices/config.html

注意:问题发生在运行 Ansible 的机器上。不是正在配置的机器。

【问题讨论】:

  • 为什么要使用 virtualenv?仅仅因为 import datatog 在你的 virtualenv 之外不起作用?
  • @GiorgosMyrianthous 是的。我不想在系统范围内安装 datadog。否则,我将最终安装我们正在使用的所有库的所有版本。导致版本噩梦
  • “Ansible 没有考虑 virtualenv” - 为什么会这样?你说你正在运行一个回调插件。 ansible_python_interpreter 指定模块的解释器(即使连接是本地的,也会上传到目标并在单独的进程中执行)。
  • @techraf:根据我从(文档)[docs.ansible.com/ansible/2.6/plugins/callback.html] 收集的信息,回调插件在控制机器上运行,而不是在受控机器上运行。此外,错误发生在 之前 ansible 甚至打开与受控机器的 ssh 连接。我错了吗?
  • 是的。您现在引用的所有内容都是正确的。那为什么你在写这个问题的时候会有相反的期望呢?

标签: python python-2.7 ansible virtualenv


【解决方案1】:

这似乎很正常,因为在您的情况下Ansible 没有引用 Python 虚拟环境:

ansible python module location = /usr/local/Cellar/ansible/2.6.3/libexec/lib/python2.7/site-packages/ansible
executable location = /usr/local/bin/ansible-playbook

在virtualenv 中未安装的包是从真实系统环境初始化的。所以你可以通过在virtualenv内设置Ansible来实现

看看这个例子:

my_user@my_machine:~$ ansible --version
ansible 2.6.3
  ansible python module location = /usr/local/lib/python2.7/dist-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 2.7.15rc1 (default, Apr 15 2018, 21:51:34) [GCC 7.3.0]

在virtualenv中安装Ansible后

(py_venv) my_user@my_machine:~$ pip install ansible==2.5.5

Ansible指的是Python虚拟环境的路径:

(py_venv) my_user@my_machine:~$ ansible --version
ansible 2.5.5
  ansible python module location = /home/my_user/py_venv/local/lib/python2.7/site-packages/ansible
  executable location = /home/my_user/py_venv/bin/ansible
  python version = 2.7.15rc1 (default, Apr 15 2018, 21:51:34) [GCC 7.3.0]

ps:安装后需要将virtualenv停用并重新激活一次才能从虚拟环境中加载Ansible。

【讨论】:

  • 它实际上并没有改变任何事情。安装顺利(pip install ansible)。当我得到版本时,路径没有改变:``` ansible 2.6.3 config file = /Users/jaep/code/cede/vagrant_boxes/ginkgo/src/edx-configuration/playbooks/ansible.cfg 配置的模块搜索路径= [u'/Users/admin/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python 模块位置 = /usr/local/Cellar/ansible/2.6.3/libexec /lib/python2.7/site-packages/ansible 可执行位置 = /usr/local/bin/ansible ```
  • 需要停用并激活 virtualenv 一次才能看到它正在被反映。
  • 就是这样。为其他人更新您的答案可能会很好。
  • 另外,将模块的路径添加到 PYTHONPATH 就可以了。
  • @E.Jaep 我澄清了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
相关资源
最近更新 更多