diff --git a/import_users.py b/import_users.py
index 456aed0e820a86d590df35d218d480af10f432c5..e56928990a69e269385e2791128f85cb9cf04b59 100755
--- a/import_users.py
+++ b/import_users.py
@@ -2,9 +2,13 @@
 "This script helps you to get mysql.user pillar from existent mysql server"
 
 import argparse
-import MySQLdb
 import re
 
+try:
+    import MySQLdb
+except ImportError:
+    raise Exception("MySQLdb not found. Install MySQL-python package.")
+
 __author__ = "Egor Potiomkin"
 __version__ = "1.0"
 __email__ = "eg13reg@gmail.com"
@@ -12,11 +16,24 @@ __email__ = "eg13reg@gmail.com"
 parser = argparse.ArgumentParser()
 parser.add_argument('host', metavar='IP', help='host where you want to get users')
 parser.add_argument('user', metavar='user', help='mysql user that can show grants')
-parser.add_argument('password', metavar='password', help='user password')
+parser.add_argument('-p', '--password', metavar='password', help='user password', required=False, default=None)
 args = parser.parse_args()
 
-# PARSE GRANTS 
-mysqlcon = MySQLdb.connect(host=args.host,user=args.user,passwd=args.password,db="mysql",use_unicode=True, charset='utf8')
+# PARSE GRANTS
+connection_config = {
+    "host": args.host,
+    "user": args.user,
+    "db": "mysql",
+    "use_unicode": True,
+    "charset": 'utf8'
+}
+
+if args.password:  # some mysql environments (developer ones) use no password
+    connection_config['passwd'] = args.password
+
+mysqlcon = MySQLdb.connect(
+    **connection_config
+)
 mysqlCur = mysqlcon.cursor(MySQLdb.cursors.DictCursor)
 
 mysqlCur.execute(r'''select user,host from mysql.user;''')
@@ -24,55 +41,62 @@ rows = mysqlCur.fetchall()
 users = []
 
 for row in rows:
-	users.append({'name': row['user'], 'host': row['host']});
+    users.append({'name': row['user'], 'host': row['host']})
 
 mysqlCur = mysqlcon.cursor()
 grants = []
 for user in users:
-	q = r'''show grants for '%s'@'%s';''' % (user['name'], user['host'])
-	try:
-		user['grants'] = []
-		mysqlCur.execute(q)
-		rows = mysqlCur.fetchall()
-		for row in rows:
-			mpass = re.search(
-				r"""GRANT USAGE ON \*\.\* TO .* IDENTIFIED BY PASSWORD '(\*[A-F0-9]*)\'""",
-				row[0])
-			if mpass is None:
-				mgrant = re.search(
-					r"""GRANT ([\s,A-Z]+) ON `?([a-zA-Z0-9_\-*\\]*)`?\.`?([a-zA-Z0-9_\-*\\]*)`? TO .*""",
-					row[0])
-				if mgrant is not None:					
-					user['grants'].append({'grant': [x.strip() for x in mgrant.group(1).split(',')], 'database': mgrant.group(2).replace('\\',''), 'table': mgrant.group(3).replace('\\','')})
-				else:
-					print "ERROR: CAN NOT PARSE GRANTS: ",row[0]
-			else:
-				user['password'] = mpass.group(1)
+    q = r'''show grants for '%s'@'%s';''' % (user['name'], user['host'])
+    try:
+        user['grants'] = []
+        mysqlCur.execute(q)
+        rows = mysqlCur.fetchall()
+        for row in rows:
+            mpass = re.search(
+                r"""GRANT USAGE ON \*\.\* TO .* IDENTIFIED BY PASSWORD '(\*[A-F0-9]*)\'""",
+                row[0])
+            if mpass is None:
+                mgrant = re.search(
+                    r"""GRANT ([\s,A-Z_]+) ON `?([a-zA-Z0-9_\-*\\]*)`?\.`?([a-zA-Z0-9_\-*\\]*)`? TO .*""",
+                    row[0])
+                if mgrant is not None:
+                    user['grants'].append(
+                        {
+                            'grant': [x.strip() for x in mgrant.group(1).split(',')],
+                            'database': mgrant.group(2).replace('\\', ''),
+                            'table': mgrant.group(3).replace('\\', '')
+                        }
+                    )
+                else:
+                    print("ERROR: CAN NOT PARSE GRANTS: ", row[0])
+            else:
+                user['password'] = mpass.group(1)
 
-	except MySQLdb.DatabaseError:
-		print "Error while getting grants for '%s'@'%s'" % (user['name'], user['host'])
-#raise SystemExit
-# PRINT RESULT
-""" PRINT EXAMPLE
-mysql:
-  user:
-    username:
-      host: host
-      password_hash: '*2792A97371B2D17789364A22A9B35D180166571A'
-      databases:
-        - database: testbase
-          table: table1
-          grants: ['select']
-"""
-print "mysql:"
-print "  user:"
-for user in users:
-	print "    %s:" % user['name']
-	print "      host: '%s'" % user['host']
-	if ('password' in user):
-		print "      password_hash: '%s'" % user['password']
-	print "      databases:"
-	for grant in user['grants']:
-		print "        - database: '%s'" % grant['database']
-		print "          table: '%s'" % grant['table']
-		print "          grants: ['%s']" % "','".join(grant['grant']).lower()
+    except MySQLdb.DatabaseError:
+        print(
+            "Error while getting grants for '%s'@'%s'" % (user['name'], user['host'])
+        )
+
+    """ PRINT EXAMPLE
+    mysql:
+        user:
+            username:
+                host: host
+                password_hash: '*2792A97371B2D17789364A22A9B35D180166571A'
+                databases:
+                    - database: testbase
+                    table: table1
+                    grants: ['select']
+    """
+    print("mysql:")
+    print("  user:")
+    for user in users:
+        print("    %s:" % user['name'])
+        print("      host: '%s'" % user['host'])
+        if ('password' in user):
+            print("      password_hash: '%s'" % user['password'])
+            print("      databases:")
+            for grant in user['grants']:
+                print("        - database: '%s'" % grant['database'])
+                print("          table: '%s'" % grant['table'])
+                print("          grants: ['%s']" % "','".join(grant['grant']).lower())