Python3使用MySQLdb的坑

最开始我用的是官网下载的mysql.connector,不太好用,新手还是跟着大众走比较好。

坑1:

import MySQLdb

显示`no module named ‘MySQLdb’

pip install MySQLdb

随之而来的就是各种错误,搜一下,对于各个平台都有替代安装方法,但大家都没写Mac的解决方案,但经尝试,pip install mysqlclient是可以的,装好之后也同样可以使用MySQLdb,具体安装方法:

BEEFdeMacBook-Pro:FreeBasic beef$ brew install mysql-client
BEEFdeMacBook-Pro:FreeBasic beef$ echo 'export PATH="/usr/local/opt/mysql-client/bin:$PATH"' >> ~/.bash_profile
BEEFdeMacBook-Pro:FreeBasic beef$ export PATH="/usr/local/opt/mysql-client/bin:$PATH"
BEEFdeMacBook-Pro:FreeBasic beef$ pip install mysqlclient

此时import MySQLdb不再显示 no module

坑2:
安装好了,运行程序,报错:

ImportError: dlopen(。。。/MySQLdb/_mysql.cpython-37m-darwin.so, 2): Library not loaded: @rpath/libmysqlclient.21.dylib
  Referenced from: 。。。/MySQLdb/_mysql.cpython-37m-darwin.so
  Reason: image not found

然而这个libmysqlclient.21.dylib明明存在
网上一搜,这是mac上常见的问题
解决方案:
有的人给出的方案是:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.21.dylib /usr/lib/libmysqlclient.21.dylib

但是会得到‘not permitted’的报错
因为/usr/lib的权限要求高于sudo,需要root,所以只要去掉sudo就可以了:

ln -s /usr/local/mysql/lib/libmysqlclient.21.dylib /usr/lib/libmysqlclient.21.dylib

坑3:
继续运行,出现了和坑2类似的错误,根据之前经验,我们应该处理这个not loaded的文件:

Library not loaded: libssl.1.1.dylib

参照网上的解决方案如下,原文链接:
libssl.1.1.dylib

错误原因

Homebrew默认安装的openssl为1.0版本;最新的uswgi要求使用1.1版本
动态链接库路径有问题
解决方法

参考 Library not loaded: libcrypto.1.0.0.dylib issue in mac 给出解决步骤:

brew reinstall [email protected]  #下载1.1版本
cd /usr/local/Cellar
mv openssl [email protected] #重命名之前的版本
mv [email protected] openssl # 使用1.1
cd /usr/local/Cellar/[email protected]/1.1.1c/lib
sudo cp libssl.1.1.dylib libcrypto.1.1.dylib /usr/local/lib/
# 接下来三步似乎不是必须的
sudo rm libssl.dylib libcrypto.dylib
sudo ln -s libssl.1.1.dylib libssl.dylib
sudo ln -s libcrypto.1.1.dylib libcrypto.dylib
```

大家原文作者这里有个小问题,就是mv [email protected] openssl # 使用1.1这句话将[email protected]改名之后,又往[email protected]目录里cd,当然是不行的,改成openssl即可

你可能感兴趣的:(Python3使用MySQLdb的坑)