python python-3.x ansible ansible-2.x

python - Excepción inesperada: el nombre ''basetring'' no se define al invocar ansible2



python-3.x ansible-2.x (5)

Estoy intentando ejecutar ansible2 commnads ...

Cuando lo hago:

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

Yo obtengo:

Excepción inesperada: el nombre ''basetring'' no está definido, el rastreo completo fue:

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

Aquí está ansible --version :

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

Y aquí está python --version

Python 3.4.3


Ansible debajo de la versión 2.5 requiere Python 2.6 o 2.7 en el host de control: Requisitos del nodo de control

basestring ya no está disponible en Python 3. De What''s New In Python 3.0 :

Se basestring el tipo abstracto de basestring incorporado. Use str lugar. Los tipos str y bytes no tienen suficiente funcionalidad en común como para garantizar una clase base compartida. La herramienta 2to3 (ver más abajo) reemplaza cada aparición de basestring con str .


El problema podría deberse a la versión de Python. En 2.x, la cadena base está ahí pero en 3.x ha sido reemplazada por "str".


Me encontré con este problema usando Python 3 con Ansible y lo resolví bifurcando el proyecto dopy e instalando dopy en mi script ansible con:

name: git+https://github.com/eodgooch/[email protected]#egg=dopy .

Si todavía recibe errores, asegúrese de cambiar la version a 0.4.0 y eliminar los paquetes de dopy persistentes de su directorio de paquetes de sitio de Python.

También podría pip3 install git+https://github.com/eodgooch/[email protected]#egg=dopy lugar de en su tarea Ansible.


Reemplace la cadena base con str. En 2.x la cadena base está ahí. pero en 3.x la cadena base ha sido reemplazada por "str".


la cadena base no está disponible en Python 3 .:

Esto se puede solucionar para python 2.xy 3.x con lo siguiente:

try: basestring except NameError: basestring = str