遇到Ansible坏的Python解释器错误怎么办?

3

我在MAC High Sierra 10.13.3上安装了ansible,但是当我尝试运行"ansible --version"时,出现以下错误:

-bash: /usr/local/bin/ansible: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory

请告诉我您是否遇到相同的问题或者有解决方案。

3个回答

9

/usr/local/bin/ansible 的第一行路径为 "/usr/local/opt/python/bin/python2.7"。而在 /usr/local/opt/python/bin/ 目录下,我有 python3.6 而非 python2.7。

因此,我修改了文件 vi /usr/local/bin/ansible 中的 PATH。

将其从 #!/usr/local/opt/python/bin/python2.7 修改为 #!/usr/local/opt/python/bin/python3.6,问题得以解决。

验证:

$ ansible --version
  ansible 2.5.0
  config file = None
  configured module search path = ['/Users/<username>/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/<username>/Library/Python/3.6/lib/python/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.6.4 (default, Mar  1 2018, 18:36:50) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)]


$ ansible localhost -m ping

  localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
  }


$ ansible localhost -m setup -a 'filter=ansible_distribution' 
  localhost | SUCCESS => {
    "ansible_facts": {
        "ansible_distribution": "MacOSX"
    },
    "changed": false
  }

Python 3的支持仍处于技术预览状态,所以最好只安装Python 2.7到您的系统中,而不要编辑源文件。 - Konstantin Suvorov
我花了一点时间来弄清楚这个问题,但是我不得不在我的Macbook M1上将Python添加到我的路径中。export PATH="/Users/hss151/Library/Python/3.9/bin:$PATH" 这有点出乎意料。(确保你重新启动终端会话或者在你的IDE中加载你的.zprofile文件。) - Boyd Hemphill

2

在我的情况下,我使用pyenv来管理我的python版本,$PATH和符号链接都正确地指向了正确的路径。

检查你的Python路径

$ pyenv which python
  /Users/<username>/.pyenv/versions/3.7.3/bin/python
$ which python
  /Users/<username>/.pyenv/shims/python

检查ansible配置

/usr/local/bin/ansible路径下的ansible配置已指向正确的python版本3.7

#!/usr/local/opt/python/bin/python3.7
.
.
.

但是ansible --version返回Python 2.7作为其解释器。

$ ansible --version
  ansible 2.9.12
  configured module search path = ['/Users/<username>/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/<username>/.pyenv/versions/2.7.16/lib/python2.7/site-packages/ansible
  executable location = /Users/<username>/.pyenv/versions/2.7.16/bin/ansible
  python version = 2.7.16 (default, Apr  2 2020, 13:02:51) [Clang 11.0.3 (clang-1103.0.32.29)]

Python3的Ansible

官方Ansible文档建议使用pip3安装Python3的Ansible,我已经卸载了旧版本的Ansible并重新使用pip3安装,但解释器仍指向Python2.7。

最后,我在我的主目录中手动添加了.ansible.cfg文件,并通过手动添加配置了Python解释器。

  ansible_python_interpreter=/usr/bin/python

ansible.cfg示例配置文件

现在,ansible已正确配置为python3。

ansible 2.9.12
  config file = /Users/<username>/.ansible.cfg
  configured module search path = ['/Users/<username>/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/<username>/.pyenv/versions/3.7.3/lib/python3.7/site-packages/ansible
  executable location = /Users/<username>/.pyenv/versions/3.7.3/bin/ansible
  python version = 3.7.3 (default, Apr  2 2020, 13:02:51) [Clang 11.0.3 (clang-1103.0.32.29)]

1
更改Python版本可能会导致一些兼容性问题,这通常发生在操作系统中安装了多个Python版本的情况下。
以下是故障排除的简单步骤:
1. 检查Python版本的命令为:which python /usr/bin/python。 2. 创建软链接到路径的命令为:ln -s /usr/bin/python /usr/local/opt/python/bin/python2.7
我希望这能解决错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接