【问题标题】:Version of Python when running Ansible commands运行 Ansible 命令时的 Python 版本
【发布时间】:2019-08-15 12:55:10
【问题描述】:

我正在使用OSX.10.12.6

我通过 pip3 安装了 ansible(为了将它与 Python3 一起使用,因为我的机器上已经默认安装了 Python2)并从 Ansible github 下载了 ec2.py 外部清单脚本

但是在运行 ansible 命令时,我得到了错误:

[WARNING]:  * Failed to parse 
~/ec2.py with script plugin: Inventory script
~/ec2.py) had an execution error: Traceback (most recent call last):   File
"~/ec2.py", line 130, in <module>     import boto ImportError: No module named boto

这似乎是因为 ansible 使用的是 Python2 而不是 Python3(我检查过,我无法从 Python2 导入 boto 或 ansible,但我可以从 Python3 导入)。我也可以成功运行以下python3 ec2.py

令人惊讶的是,如果我运行ansible --version,我会得到以下信息:

ansible 2.8.3
config file = ~/ansible.cfg
configured module search path = ['/Users/XXXX/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.6/site-packages/ansible
executable location = /usr/local/bin/ansible
python version = 3.6.5 (default, Mar 30 2018, 06:42:10) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)]

我可以做些什么来“强制”ansible 使用 Python3 而不是 Python2?

PS:请注意,我可以通过 Python2 上的 pip install boto 解决初始错误,但弹出其他错误并宁愿使用 Python3

【问题讨论】:

  • 看起来 Ansible is 使用 Python 3。ansible --version 的输出清楚地显示了python version = 3.6.5。当您在终端上运行 python3 时,它可能使用了 不同 python 3。 which python3 的输出是什么? head -1 $(which ansible) 的输出是什么?
  • 谢谢。 which python3 给我/usr/local/bin/python3head -1 $(which ansible) 给我#!/usr/local/opt/python/bin/python3.6。所以确实是不同的,但是当为两者输入 Python 命令时,两者都是 3.6.5 版本,我可以毫无问题地为两者导入 boto。请注意,我确认通过 pip2.7 install boto 在 Python2 上安装 boto 我能够成功删除先前的错误(但在下一次导入时失败,import ansible。我想我现在很困惑 =(
  • 我认为/usr/local/opt/python/bin/python3.6/usr/local/bin/python3 是相同的(指向相同的Python 安装),我不确定如何正式测试,但我通过pip3 install 或@ 测试987654340@ 一些库和更改反映在两者中
  • @Vincent: /usr/local/bin/python3 很可能是一个链接或包装器。
  • 感谢@VladimirBotka 我是这么认为的。不幸的是,这意味着我的问题仍然存在并且很好!

标签: macos ansible python-3.6


【解决方案1】:

今天发布的 FreeBSD Quarterly (Stable) Ports Branch 2019Q3Ansible 2.7.10。 HEAD 上周日升级到Ansible 2.8.3!结论是,FreeBSD 决定不将 2.8.3 放入 STABLE 分支。可能原因之一是 Ansible 2.8 Python interpreter discovery 中的新功能。见Using FLAVORS。因此,要么降级到 Ansible 2.7,要么继续修复 HEAD(在 MacOS 中)。

可能值得尝试将ansible_python_interpreter 设置为 Python 2.7。


(有些人可能会认为这是一个评论。我从那里开始,但它太长了。)

【讨论】:

  • 谢谢 - 我降级了 ansible 但它没有解决问题。我不知道如何将 ansible_python_interpreter 设置为 Python3.6(所以我通过在 Python2 上安装 boto 和 ansible 来解决这个问题,不理想......)
  • 这是标准的。我在 Ubuntu 中使用 Python 2.7.15 运行 Ansible 2.8.3。如果它适用于 Python2,您应该会很高兴。见Python 3 Support
猜你喜欢
  • 2016-08-24
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
相关资源
最近更新 更多