Не удалось импортировать MySQLdb в доступный модуль

Я пытаюсь написать собственный модуль в ansible. при использовании import MySQLdb выдает ошибку

 failed: [127.0.0.1] => {"failed": true, "parsed": false}
invalid output was: Traceback (most recent call last):
  File "/root/.ansible/tmp/ansible-1394199347.29-33439012674717/inventory", line 11, in <module>
    import MySQLdb
ImportError: No module named MySQLdb

Использование
Версия Python: 2.6.6
Версия MySQL-python: 1.2.3

Код Python: -

#!/usr/bin/python

import datetime
import sys
import json
import os
import shlex
import MySQLdb

db = MySQLdb.connect("localhost","user","pwd","db_name" )
cursor = db.cursor()
cursor.execute("SELECT * FROM hosts")
data = cursor.fetchone()
print data
db.close()

Я написал playbook для запуска модуля ansible: -

инвентарь.yaml: -

---
- hosts: webservers
  user: root
  sudo: True
  vars:
     act: list
  tasks:
  - name: Run module inventory
    action: inventory act="{{act}}" prod="roop"

Я запускаю эту книгу, используя следующие команды: -

ansible-playbook -v playboook/path/inventory.yaml 

Тот же код работает в командной строке python (‹‹‹), но не работает в модуле ansible.

В моем доступном модуле работает другой код. Есть ли какие-либо настройки конфигурации, которые необходимо выполнить для ansible??


person Roopendra    schedule 07.03.2014    source источник
comment
Вы уверены, что у пользователя, которого вы используете для запуска скрипта, достаточно прав для запуска модуля MySQLdb?   -  person Vor    schedule 07.03.2014
comment
Я запускаю этот скрипт как пользователь root   -  person Roopendra    schedule 07.03.2014
comment
Можете ли вы запустить с ANSIBLE_KEEP_REMOTE_FILES=1 и показать код /root/.ansible/tmp/ansible-xxx/inventory? Вы используете виртуалэнв?   -  person leucos    schedule 07.03.2014
comment
@лейкос. Я пробовал с ANSIBLE_KEEP_REMOTE_FILES, отображается то же сообщение об ошибке. и блок кода инвентаря такой же, который я упомянул в коде Python. Нет, я не использую virtualenv   -  person Roopendra    schedule 08.03.2014
comment
Я имел в виду использование ANSIBLE_KEEP_REMOTE_FILES и проверку сгенерированного файла (см. ansible doc о разработке модуля)   -  person leucos    schedule 08.03.2014


Ответы (1)


Ваш модуль MySQLdb не находится в среде Python. В вашем скрипте вы используете python, используя: #!/usr/bin/python. Вполне возможно, что Python, который вы запускаете из командной строки (>>>), — это не тот же Python. Вы можете попробовать запустить:

which python

чтобы узнать, от какого Python вы работаете. Итак, если это еще один Python для его установки, вы можете запустить его на Ubuntu:

sudo apt-get install python-mysqldb

или в CentOS, RedHat:

sudo yum install MySQL-python

Надеюсь, поможет.

person Rico    schedule 07.03.2014
comment
Спасибо за ваш ответ. Я уже установил MySQL-python. Да, я проверю, использую ли я другой Python. - person Roopendra; 07.03.2014
comment
Оба используют один и тот же python /usr/bin/python - person Roopendra; 08.03.2014
comment
Как вы установили Ansible? с помощью пипа? Вы можете перейти в командную строку Python и ввести >>> import ansible? Вы получаете какую-либо ошибку? - person Rico; 08.03.2014
comment
Я извлек tar и установил переменную env, используя ansible/hacking/env-setup. и >>> import ansible ничего не возвращает - person Roopendra; 08.03.2014
comment
Можете ли вы опубликовать свой код Ansible, который вы используете для запуска этого модуля? - person Rico; 08.03.2014
comment
Ну, не глядя на это, все, что я могу сказать, это конфигурация среды. В python, на котором работает Ansible, нет модуля MySQLdb. MySQLdb, который вы установили, относится к установке python, которая не использует Ansible на вашем компьютере. Или может быть просто ваша переменная PYTHONPATH указывает на неправильное место. - person Rico; 10.03.2014
comment
две вещи, которые я делал неправильно здесь. 1) Мне нужно запустить этот скрипт на локальном сервере, я был запущен для удаленного сервера и 2) проблема, связанная с моими правами пользователя, была там. Я создал нового пользователя и заново настроил. тогда нормально работает. Я принимаю ваш ответ, потому что вы указываете мне на мою проблему. Так что частично это было полезно :) Спасибо - person Roopendra; 12.03.2014