我开始学习Python/Django,遇到了第一个障碍。当试图在settings.py
中设置我的数据库时,内部服务器失败,并显示:
File "/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py", line 16, in <module>
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Users/rob/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Users/rob/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so
Reason: image not found
我发现了很多解决方案,主要涉及对DYLD_LIBRARY_PATH
值的明确定义,但这对我来说不起作用。安装了MysQL-Python
(v1.2.3)。
你知道我可能需要做些什么来度过难关吗?
谢谢。
更新
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'django_tutorial', # Or path to database file if using sqlite3.
'USER': 'root', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
从您的评论中,libmysqlclient
dylib似乎是使用非绝对库名称路径安装的。这与OS X上的标准做法相反,OS X在这方面与大多数其他Unix-y系统不同。您应该能够通过使用install_name_tool
修改.so文件中的路径来永久地修复问题(至少在下次升级之前),或者您可以通过确保您的Django实例运行时定义了以下环境变量来使其正常工作:
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib
您还可以通过在/usr/local/lib
中创建到/usr/local/mysql/lib
中dylib的符号链接来使其工作,因为/usr/local/lib
在默认的动态负载搜索路径上,所以(未测试!)类似于:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
一个更好的长期解决方案是不要使用损坏的MySQL客户端安装,如Python导入MySQLdb错误-Mac10.6中所建议的那样。
使用mysql
的自制安装,这对我来说很有效:
$ mdfind libmysqlclient
/usr/local/Cellar/mysql/5.7.9/lib/libmysqlclient.20.dylib
/usr/local/Cellar/mysql/5.7.9/lib/libmysqlclient.a
/usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib
/usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.a
/usr/local/Cellar/mysql/5.6.26/lib/libmysqlclient.18.dylib
/usr/local/Cellar/mysql/5.6.26/lib/libmysqlclient.a
$ sudo ln -s /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
确保您不仅拥有MySql Python,而且拥有实际的MySql。MySQL python正在尝试加载MySQL库,该库应该位于/usr/local/MySQL VERSION/lib之类的位置。
尝试运行
mdfind libmysqlclient
在命令行中。扫描这些结果,如果你没有看到它丢失的文件(libmysqlclient.18.dylib),那么你可能没有正确安装mysql。
您最近可能升级了mysql。当我用brew将MySql从5.6升级到5.7时,我遇到了这个问题。这无疑破坏了一些库,但将mysql重新链接到5.6修复了这个问题。因此,首先看看您以前使用的mysql版本:CCD_ 10和之后使用例如CCD_ 11命令切换回该版本。
你能给我们看看你的settings.py代码吗?您还可以尝试编辑mysqlconfig文件的路径,以指向/usr/local/mysql/bin/mysql_config,如本文中更详细地讨论的:http://dakrauth.com/blog/entry/python-and-django-setup-mac-os-x-leopard/
我没有足够的声誉来评论Ned Deily上面的回答:),但在修复了拼写错误后,环境变量方法对我有效;应该是:
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib
如果你走那条路,我会建议两件事;确保您不会使用破坏任何其他DYLD_LIBRARY_PATH设置
export DYLD_LIBRARY_PATH=$DYLD_LIBARY_PATH:/usr/local/mysql/lib
并将其放在.bashrc文件中,这样您就不必记得在每个终端会话中设置它了。
与symlink选项相比,此方法的好处在于,它将允许找到所有mysql-dylib文件,而不仅仅是您指定的symlink文件。