Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
440 views
in Technique[技术] by (71.8m points)

python - django - Error loading MySQLdb module: No module named MySQLdb

I'm using Django 1.4.1 with Active Python 2.7 on Win7. I have installed the MySQL module using pypm install mysql-python.

The database engine is django.db.backends.mysql.

import MySQLdb works in the interactive shell.

.manage.py syncdb created the tables with no problem.

However, when I open the site in the browser, I get Error loading MySQLdb module: No module named MySQLdb:

Environment:


Request Method: GET
Request URL: http://whatever/

Django Version: 1.4.1
Python Version: 2.7.2
Installed Applications:
('django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "C:Python27libsite-packagesdjangocorehandlersase.py" in get_response
  89.                     response = middleware_method(request)
File "C:Python27libsite-packagesdjangocontribsessionsmiddleware.py" in process_request
  10.         engine = import_module(settings.SESSION_ENGINE)
File "C:Python27libsite-packagesdjangoutilsimportlib.py" in import_module
  35.     __import__(name)
File "C:Python27libsite-packagesdjangocontribsessionsackendscached_db.py" in <module>
  6. from django.contrib.sessions.backends.db import SessionStore as DBStore
File "C:Python27libsite-packagesdjangocontribsessionsackendsdb.py" in <module>
  3. from django.db import IntegrityError, transaction, router
File "C:Python27libsite-packagesdjangodb\__init__.py" in <module>
  40. backend = load_backend(connection.settings_dict['ENGINE'])
File "C:Python27libsite-packagesdjangodb\__init__.py" in __getattr__
  34.         return getattr(connections[DEFAULT_DB_ALIAS], item)
File "C:Python27libsite-packagesdjangodbutils.py" in __getitem__
  92.         backend = load_backend(db['ENGINE'])
File "C:Python27libsite-packagesdjangodbutils.py" in load_backend
  24.         return import_module('.base', backend_name)
File "C:Python27libsite-packagesdjangoutilsimportlib.py" in import_module
  35.     __import__(name)
File "C:Python27libsite-packagesdjangodbackendsmysqlase.py" in <module>
  16.     raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)

Exception Type: ImproperlyConfigured at /
Exception Value: Error loading MySQLdb module: No module named MySQLdb

The settings for the sessions and messages apps are:

SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
MESSAGE_STORAGE = "django.contrib.messages.storage.cookie.CookieStorage"

How is this possible?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The problem was that MySQLdb was installed in my home directory C:UsersalexeiAppDataRoamingPythonPython27site-packages which was not in Python's path. So I uninstalled it with pypm uninstall mysql-python and then reinstalled it globally using pypm -g install mysql-python (note the -g option).

The alternative is to add that path to the list sys.path.append("...path...") in wsgi.py

So, in case someone else is wondering, you can find out where MySQLdb (or any other module) is installed like so:

import MySQLdb
print MySQLdb.__file__

Make sure that that path is in Python's path list provided in Django's error message.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...