【问题标题】:django - Error loading MySQLdb module: No module named MySQLdbdjango - 加载 MySQLdb 模块时出错:没有名为 MySQLdb 的模块
【发布时间】:2012-09-28 04:05:12
【问题描述】:

我在 Win7 上使用 Django 1.4.1 和 Active Python 2.7。我已经使用pypm install mysql-python 安装了 MySQL 模块。

数据库引擎是django.db.backends.mysql

import MySQLdb 在交互式外壳中工作。

.\manage.py syncdb 毫无问题地创建了表格。

但是,当我在浏览器中打开该网站时,我得到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:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  89.                     response = middleware_method(request)
File "C:\Python27\lib\site-packages\django\contrib\sessions\middleware.py" in process_request
  10.         engine = import_module(settings.SESSION_ENGINE)
File "C:\Python27\lib\site-packages\django\utils\importlib.py" in import_module
  35.     __import__(name)
File "C:\Python27\lib\site-packages\django\contrib\sessions\backends\cached_db.py" in <module>
  6. from django.contrib.sessions.backends.db import SessionStore as DBStore
File "C:\Python27\lib\site-packages\django\contrib\sessions\backends\db.py" in <module>
  3. from django.db import IntegrityError, transaction, router
File "C:\Python27\lib\site-packages\django\db\__init__.py" in <module>
  40. backend = load_backend(connection.settings_dict['ENGINE'])
File "C:\Python27\lib\site-packages\django\db\__init__.py" in __getattr__
  34.         return getattr(connections[DEFAULT_DB_ALIAS], item)
File "C:\Python27\lib\site-packages\django\db\utils.py" in __getitem__
  92.         backend = load_backend(db['ENGINE'])
File "C:\Python27\lib\site-packages\django\db\utils.py" in load_backend
  24.         return import_module('.base', backend_name)
File "C:\Python27\lib\site-packages\django\utils\importlib.py" in import_module
  35.     __import__(name)
File "C:\Python27\lib\site-packages\django\db\backends\mysql\base.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

会话和消息应用的设置是:

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

这怎么可能?

【问题讨论】:

  • 如果您在没有重新启动 Web 服务器的情况下安装了 MySQLdb,它可能还没有启动。
  • 我有一个脚本可以检查更改并自动重新启动服务器。不过没关系,我已经找到了问题并会发布答案。
  • 啊,现在我意识到我没有正确阅读您的评论。我正在使用带有 mod_wsgi 的 Apache,而不是 Django 附带的开发服务器。 MySQLdb 模块是几天前安装的,所以这不是问题。

标签: python django mysql-python


【解决方案1】:

问题是 MySQLdb 安装在我的主目录 C:\Users\alexei\AppData\Roaming\Python\Python27\site-packages\ 中,而该目录不在 Python 的路径中。所以我用pypm uninstall mysql-python 卸载了它,然后用pypm -g install mysql-python 重新全局 安装它(注意-g 选项)。

另一种方法是将该路径添加到sys.path.append("...path...")wsgi.py 中的列表中

所以,如果其他人想知道,您可以像这样找出 MySQLdb(或任何其他模块)的安装位置:

import MySQLdb
print MySQLdb.__file__

确保该路径位于 Django 错误消息中提供的 Python 路径列表中。

【讨论】:

    【解决方案2】:

    我也遇到了这个问题,然后我将 python mysql 安装到我的系统中

    pip 安装 mysql-python

    然后它的作品 看到这个 --> 在我的系统中工作 >>
    $ python manage.py syncdb;

    创建表 ...
    创建表 django_admin_log
    创建表 auth_permission
    创建表 auth_group_permissions
    创建表 auth_group
    .............工作

    【讨论】:

      【解决方案3】:

      最简单的方法是从二进制安装 MySQLdb: http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python

      【讨论】:

        【解决方案4】:

        如果您使用的是虚拟环境。你必须运行

        cd virtualEnvPath
        pip install MySQL-Python
        

        不要忘记在虚拟环境中定位。 /bin PATH,使用本地 pip。 问候!

        【讨论】:

        • 如果你收到类似:for package MySQL-Python sh: mysql_config: command not found 那你就不见了: yum install python-devel mysql-devel ----> for CENTOS
        【解决方案5】:

        我通过以下方式配置了带有 mysql 的 djando:

        1) 在.bashrc 中设置DJANGO_SETTINGS_MODULE 环境变量并获取它

        2)像这样(对于mysql)更改此env_var和local_settings.py(如果有)指向的settings.py:

        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql', 
                'NAME': 'DB_NAME',
                'USER': 'DB_USER',
                'PASSWORD': 'DB_PASSWORD',
                'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
                'PORT': '3306',
            }
        }
        

        3) 安装mysql dev库和头文件,确保mysql在PATH

        sudo apt-get install libmysqlclient-dev
        

        4) 为mysql安装python包

        sudo pip install MySQL-python
        

        5) 测试 django 对你的 mysql 数据库的访问:

        python manage.py dbshell
        

        django-admin dbshell
        

        6) 使用 django 应用程序将 django 从 dir 同步到 mysql

        python manage.py syncdb
        

        【讨论】:

          猜你喜欢
          • 2015-08-22
          • 2017-01-27
          • 2014-11-12
          • 2017-04-22
          • 2013-02-25
          • 2014-12-21
          • 2016-04-06
          • 2014-08-14
          • 1970-01-01
          相关资源
          最近更新 更多