无法在ansible模块中导入MySQLdb

2 投票
1 回答
3446 浏览
提问于 2025-04-17 21:18

我正在尝试在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()

我写了一个剧本来运行ansible模块:

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模块中却不行。

在我的ansible模块中,其他代码都能正常运行。
请问是否需要对ansible进行什么配置设置?

1 个回答

6

你的 MySQLdb 模块在 Python 环境中找不到。在你的脚本里,你是用 #!/usr/bin/python 来运行 Python 的。很有可能你在命令行中运行的 Python(也就是你输入 >>> 后的那个)和你脚本里用的不是同一个 Python。你可以试着运行:

which python

来查看你正在使用哪个 Python。如果是其他版本的 Python,你可以在 Ubuntu 上安装它:

sudo apt-get install python-mysqldb

或者在 CentOS、RedHat 上安装:

sudo yum install MySQL-python

希望这些信息对你有帮助。

撰写回答