【发布时间】: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/python3而head -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