【问题标题】:Error loading MySQLdb module with Django on OS X在 OS X 上使用 Django 加载 MySQLdb 模块时出错
【发布时间】:2016-02-16 12:24:59
【问题描述】:

我有一个非常奇怪的情况,我无法弄清楚出了什么问题。

我正在做一个 Django 项目,我:

在 OS X 上安装 MySQL

添加了 DATABASES 值:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/path/to/my.cnf',
        },
    }
}

但随后 Django/Mezzanine 告诉我加载 MySQLdb 模块时出错。

所以我在 Google 上搜索了一些关于此的提示并尝试了以下方法:

pip install mysql-python
  • 重新安装 pip
  • 已下载 ez_setup.py 并安装

现在我被困住了。出现了同样的错误,感觉 MySQL 连接器/适配器存在问题,无法加载。

接下来我应该尝试什么?

使用回溯编辑:

/Library/Python/2.7/site-packages/django/db/utils.py:238: RemovedInDjango19Warning: In Django 1.9 the TEST_COLLATION connection setting will be moved to a COLLATION entry in the TEST setting
  self.prepare_test_settings(alias)

Unhandled exception in thread started by <function wrapper at 0x1064bc5f0>
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/django/utils/autoreload.py", line 229, in wrapper
    fn(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/mezzanine/core/management/commands/runserver.py", line 154, in inner_run
    super(Command, self).inner_run(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/django/core/management/commands/runserver.py", line 107, in inner_run
    autoreload.raise_last_exception()
  File "/Library/Python/2.7/site-packages/django/utils/autoreload.py", line 252, in raise_last_exception
    six.reraise(*_exception)
  File "/Library/Python/2.7/site-packages/django/utils/autoreload.py", line 229, in wrapper
    fn(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/django/__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Library/Python/2.7/site-packages/django/apps/registry.py", line 108, in populate
    app_config.import_models(all_models)
  File "/Library/Python/2.7/site-packages/django/apps/config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/Library/Python/2.7/site-packages/django/contrib/auth/models.py", line 41, in <module>
    class Permission(models.Model):
  File "/Library/Python/2.7/site-packages/django/db/models/base.py", line 139, in __new__
    new_class.add_to_class('_meta', Options(meta, **kwargs))
  File "/Library/Python/2.7/site-packages/django/db/models/base.py", line 324, in add_to_class
    value.contribute_to_class(cls, name)
  File "/Library/Python/2.7/site-packages/django/db/models/options.py", line 250, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/Library/Python/2.7/site-packages/django/db/__init__.py", line 36, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/Library/Python/2.7/site-packages/django/db/utils.py", line 240, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/Library/Python/2.7/site-packages/django/db/utils.py", line 111, in load_backend
    return import_module('%s.base' % backend_name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py", line 27, in <module>
    raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb
/Library/Python/2.7/site-packages/django/db/utils.py:238: RemovedInDjango19Warning: In Django 1.9 the TEST_COLLATION connection setting will be moved to a COLLATION entry in the TEST setting
  self.prepare_test_settings(alias)

Unhandled exception in thread started by <function wrapper at 0x10de74500>
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/django/utils/autoreload.py", line 229, in wrapper
    fn(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/mezzanine/core/management/commands/runserver.py", line 154, in inner_run
    super(Command, self).inner_run(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/django/core/management/commands/runserver.py", line 107, in inner_run
    autoreload.raise_last_exception()
  File "/Library/Python/2.7/site-packages/django/utils/autoreload.py", line 252, in raise_last_exception
    six.reraise(*_exception)
  File "/Library/Python/2.7/site-packages/django/utils/autoreload.py", line 229, in wrapper
    fn(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/django/__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Library/Python/2.7/site-packages/django/apps/registry.py", line 108, in populate
    app_config.import_models(all_models)
  File "/Library/Python/2.7/site-packages/django/apps/config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/Library/Python/2.7/site-packages/django/contrib/auth/models.py", line 41, in <module>
    class Permission(models.Model):
  File "/Library/Python/2.7/site-packages/django/db/models/base.py", line 139, in __new__
    new_class.add_to_class('_meta', Options(meta, **kwargs))
  File "/Library/Python/2.7/site-packages/django/db/models/base.py", line 324, in add_to_class
    value.contribute_to_class(cls, name)
  File "/Library/Python/2.7/site-packages/django/db/models/options.py", line 250, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/Library/Python/2.7/site-packages/django/db/__init__.py", line 36, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/Library/Python/2.7/site-packages/django/db/utils.py", line 240, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/Library/Python/2.7/site-packages/django/db/utils.py", line 111, in load_backend
    return import_module('%s.base' % backend_name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py", line 27, in <module>
    raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

运行 pip 命令时:

The directory '/Users/myusername/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
You are using pip version 7.0.3, however version 7.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
The directory '/Users/myusername/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting mysql-python
  Downloading MySQL-python-1.2.5.zip (108kB)
    100% |████████████████████████████████| 110kB 495kB/s 
    Complete output from command python setup.py egg_info:
    sh: mysql_config: command not found
    Traceback (most recent call last):
      File "<string>", line 20, in <module>
      File "/private/tmp/pip-build-LaB_Nv/mysql-python/setup.py", line 17, in <module>
        metadata, options = get_config()
      File "setup_posix.py", line 43, in get_config
        libs = mysql_config("libs_r")
      File "setup_posix.py", line 25, in mysql_config
        raise EnvironmentError("%s not found" % (mysql_config.path,))
    EnvironmentError: mysql_config not found

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/tmp/pip-build-LaB_Nv/mysql-python

【问题讨论】:

  • 你能提供错误的完整追溯吗?
  • 当您运行 pip 命令时究竟发生了什么?您是否在与您的项目相同的 virtualenv 中执行此操作?
  • @DanielRoseman:现在编辑输出。

标签: python mysql django mysql-python


【解决方案1】:

当您尝试为 postgres 安装 psycopg2 软件包时,问题也是一样的。要解决此问题,您必须将您的 mysql bin 目录添加到 PATH

按照以下步骤操作:
1. 下载DMG存档并安装最新官方版Mysql社区服务器:mysql-5.7.9
2. 将mysql bin 目录添加到PATH。为此,请将此添加到您的 ~/.bash_profile 文件中

# add mysql bin directory
PATH="/usr/local/mysql/bin/:${PATH}"
export PATH
  1. 重新启动计算机
  2. 运行:pip install mysql-python

它应该输出:Successfully installed mysql-python-1.2.5

【讨论】:

  • 非常感谢你!这是一个很好且有效的答案!
  • 欢迎您 :) 如果稍后您正在使用 postgres,请执行相同的操作。
【解决方案2】:

对于 Mac 用户

mysql-connector-c 有一些问题所以,

打开 /usr/local/bin/mysql_config 脚本进行修改:

Libs = "-L$pkglibdir"
Libs = "$libs -l"

改成:

Libs = "-L$pkglibdir"
Libs = "$libs -lmysqlclient -lssl -lcrypto"

然后安装Python-Mysql,

pip install MySQL-python

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-25
    • 2015-06-20
    • 2012-09-28
    • 2017-10-20
    • 2016-04-06
    • 2020-10-08
    • 2013-03-13
    • 2016-03-05
    相关资源
    最近更新 更多