Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为Python虚拟环境配置Ansible?_Python_Python 2.7_Ansible_Virtualenv - Fatal编程技术网

如何为Python虚拟环境配置Ansible?

如何为Python虚拟环境配置Ansible?,python,python-2.7,ansible,virtualenv,Python,Python 2.7,Ansible,Virtualenv,我目前正在尝试运行一个使用回调插件的playbook。 此插件使用名为datadog的模块: import datadog 当我尝试运行playbook时,会收到一条错误消息: ImportError:没有名为datadog的模块 为了解决这个问题,我创建了一个virtualenv,激活它并安装了datadog模块: virtualenv ansible -p python2.7 source ./ansible/bin/activate pip install datadog 然后,当我启

我目前正在尝试运行一个使用回调插件的playbook。 此插件使用名为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

据我所知,Ansible没有考虑到虚拟化。我希望Ansible使用
Ansible python模块位置中的VirtualNV路径

我怎样才能使用virtualenv?我在ansible文档中没有找到任何与python路径相关的内容:


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

这似乎很正常,因为在您的情况下,
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

看看这个例子:

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

(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

为什么要使用virtualenv?仅仅因为导入数据在你的virtualenv之外不起作用?@Giorgosmyriantous是的。我不想在系统范围内安装datadog。否则,我将安装我们正在使用的所有库的所有版本。导致一个版本噩梦“Ansible没有考虑到virtualenv”-为什么会这样?你说你正在运行一个回调插件
ansible\u python\u解释器
指定模块的解释器(上传到目标并在单独的进程中执行,即使连接是本地的)。@techraf:根据我从(文档)收集的信息[,回调插件是在控制机器上运行的,而不是在控制机器上运行的。此外,在ansible甚至打开到控制机器的ssh连接之前就发生了错误。我错了吗?是的。你现在引用的所有内容都是正确的。那么,为什么你在写问题时会有相反的预期呢?它实际上并不正确改变了一件事。安装进行得很顺利(
pip install ansible
)。当我得到版本时,路径没有改变:``ansible 2.6.3配置文件=/Users/jaep/code/cede/vagrant\u box/gingo/src/edx配置/playbooks/ansible.cfg配置的模块搜索路径=[u'/Users/admin/.ansible/plugins/modules',u'/usr/share/ansible/plugins/modules']ansible python module location=/usr/local/Cell/ansible/2.6.3/libexec/lib/python2.7/site-packages/ansible executable location=/usr/local/bin/ansible``需要停用并激活virtualenv一次,才能看到它被反映出来。就是这样。为其他人更新您的答案可能很好。或者,添加到m的路径odules到
蟒蛇路径
做了这个把戏。@E.Jaep我澄清了答案。
(py_venv) my_user@my_machine:~$ pip install ansible==2.5.5
(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]