意外异常:在调用ansible2时,名称'basestring'未定义

2024-09-29 02:29:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试执行ansible2命令。。。

当我这样做时:

ansible-playbook -vvv -i my/inventory my/playbook.yml

我得到:

Unexpected Exception: name 'basestring' is not defined the full traceback was:

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

这里是ansible --version

ansible 2.0.0.2
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides

这里是python --version

Python 3.4.3

Tags: runinpymylibpackagesusrlocal
3条回答

低于版本2.5的Ansible需要控制主机上的Python 2.6或2.7:Control Node Requirements

basestring在Python 3中不再可用。来自What’s New In Python 3.0

The builtin basestring abstract type was removed. Use str instead. The str and bytes types don’t have functionality enough in common to warrant a shared base class. The 2to3 tool (see below) replaces every occurrence of basestring with str.

我在使用带有Ansible的Python 3时遇到了这个问题,通过分叉dopy项目并在Ansible脚本中安装dopy来解决这个问题:

name: git+https://github.com/eodgooch/dopy@0.4.0#egg=dopy

如果仍有错误,请确保将version更改为0.4.0,并从Python站点包目录中删除任何延迟的dopy包。

你也可以pip3 install git+https://github.com/eodgooch/dopy@0.4.0#egg=dopy代替你的职责。

basestring在Python3中不可用

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

try:
  basestring
except NameError:
  basestring = str

相关问题 更多 >