OS X 10.11 下Python-MySQLdb无法使用的问题

身为一个不作就不会死的程序员

本文将记录如何作死,在作活的过程。


环境:
MacBook Pro (13-inch, Mid 2012)
macOS 10.12.3 (16D32)
Darwin 16.4.0

Python 2.7.10
Django 1.10.4
mysql 5.6.33


原因:学习python, 为了使apache像支持PHP一样支持 python
过程:环境配置失败
后果:导致MySQLdb 引用失败(应是路径问题)
错误信息:
File “/Library/Python/2.7/site-packages/django/db/backends/mysql/base.py”, line 16, in
raise ImproperlyConfigured(“Error loading MySQLdb module: %s” % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.9-intel.egg/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.9-intel.egg/_mysql.so
Reason: image not found

解决过程:

-终端执行 import MySQLdb,导入失败。
-pip 重装了MySQLdb
-重新执行import MySQLdb,依然失败。
错误信息:Library not loaded: libmysqlclient.18.dylib

百度如下:

  1. 需要确定MySQL是否为64位版本,然后需要导入mysql的路径
  2. 在终端执行 vim ~/.bash_profile
  3. 在该文件中输入 export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/ 保存后执行(:wq)
  4. 在终端执行 source ~/.bash_profile
  5. 在终端执行 sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
    sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

检查电脑 .bash_profile的配置信息后,发现正常。
直接执行了第五步的命令,出现以下信息:
ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted
出现这个提示的原因是:
OS X 10.11 中System Integrity Protection 的功能,阻止了写入的操作的,默认是开启的,需要关闭。(自己配置apache python时更改过这里)

关闭方式:
重启电脑,开机时按住 cmd + R,进入 Recovery 模式。然后打开终端工具 ,执行关闭命令:csrutil diable (开启:csrutil enable),然后再次重启电脑即可。
关闭以后重新执行上边的第五步,OK。(参考来源http://blog.csdn.net/u012763043/article/details/49056299)

Pycharm运行项目又报错了
错误描述
django.db.utils.OperationalError: (2003, “Can’t connect to MySQL server on ‘localhost’ (10061)”)

解决办法
将/private/etc/hosts文件中下面这名话放开:
127.0.0.1 localhost
或者
将 HOST字段改为 ‘127.0.0.1’
结果发现自己的配置中没有这个问题。

然后看了系统设置中的MySQL 发现mysql server 暂停了服务,restart 竟然启动不起来,在MySQL操作面板上会提示“Warning:The /usr/local/MySQL/data directory is not owned by the ‘mysql‘ or ‘_mysql‘ ”,
Mac 下面运行 “sudo chown -R _mysql:wheel /usr/local/mysql/data”
再次restart 成功。(参考来源http://blog.csdn.net/gaixm/article/details/49422511)

但是当重新开启System Integrity Protection 的功能后,又不行了。

有教程说不关闭System Intergrity Protection ,在终端执行:
sudo install_name_tool -change libmysqlclient.18.dylib \
/usr/local/mysql/lib/libmysqlclient.18.dylib \
/Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.9-intel.egg/_mysql.so

我执行的时候报了一个关于Xcode的错误(我装了两个Xcode7.3.1和8.2),遂放弃了这种方法。

你可能感兴趣的:(Python)