2014-03-07 53 views
2

我正在嘗試編寫自定義模塊。在使用import MySQLdb它給我的錯誤無法在導入的模塊中導入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() 

我寫了一個劇本來運行模塊: -

inventory.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模塊中,其他代碼正在工作。 有沒有任何配置設置需要做的事情?

+0

您確定您用於運行腳本的用戶具有足夠的權限來運行MySQLdb模塊嗎? – Vor

+0

我以root用戶身份運行此腳本 – Roopendra

+0

您可以使用ANSIBLE_KEEP_REMOTE_FILES = 1運行並顯示/root/.ansible/tmp/ansible-xxx/inventory代碼嗎?你在使用virtualenv嗎? – leucos

回答

6

您的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 

希望它能幫助。

+0

感謝您的回覆。我已經安裝了MySQL-python。是的,我會檢查我是否使用不同的python。 – Roopendra

+0

兩者都使用相同的python/usr/bin/python – Roopendra

+0

你是如何安裝Ansible的?使用pip?你可以去Python命令行並輸入'>>> import ansible'嗎?你有什麼錯誤嗎? – Rico