意外异常:调用ansible2时未定义名称"basestring"

cod*_*onk 51 python python-3.x ansible ansible-2.x

我正在尝试执行ansible2 commnads ...

当我做:

ansible-playbook -vvv -i my/inventory my/playbook.yml
Run Code Online (Sandbox Code Playgroud)

我明白了:

意外的异常:名称'basestring'未定义完整的回溯是:

Traceback (most recent call last):
  File "/usr/local/bin/ansible-playbook", line 85, in <module>
    sys.exit(cli.run())
  File "/usr/local/lib/python3.4/site-packages/ansible/cli/playbook.py", line 150, in run
    results = pbex.run()
  File "/usr/local/lib/python3.4/site-packages/ansible/executor/playbook_executor.py", line 87, in run
    self._tqm.load_callbacks()
  File "/usr/local/lib/python3.4/site-packages/ansible/executor/task_queue_manager.py", line 149, in load_callbacks
    elif isinstance(self._stdout_callback, basestring):
NameError: name 'basestring' is not defined
Run Code Online (Sandbox Code Playgroud)

这是ansible --version:

ansible 2.0.0.2
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
Run Code Online (Sandbox Code Playgroud)

这是 python --version

Python 3.4.3
Run Code Online (Sandbox Code Playgroud)

udo*_*dan 80

低于2.5版的Ansible在控制主机上需要Python 2.6或2.7:控制机器要求

basestring在Python 3中不再可用.来自Python 3.0中的新功能:

内置的basestring抽象类型已被删除.请str改用.该strbytes类型没有足够的功能共同保证一个共享的基类.该2to3工具(见下文)取代的每次出现basestringstr.

  • 如果这有助于其他任何人,当我使用`pip`和`pip3`安装ansible时,它错误地指向python3,但是当我执行`pip2 install ansible`时,它工作正常,将它放在每个ansible实用程序的顶部: `#!的/ usr /本地的/ opt /蟒蛇/斌/ python2.7` (8认同)
  • 我觉得这是pip或python包中的一个缺陷.我不应该pip3安装与python3不兼容的东西. (6认同)

小智 18

basetring在Python 3中不可用:

对于python 2.x和3.x,可以使用以下方法修复此问题:

try:
  basestring
except NameError:
  basestring = str
Run Code Online (Sandbox Code Playgroud)