MacOS环境下Django无法找到MySQL驱动的原因排查求助
MacOS下Django找不到MySQL驱动的解决方法
问题核心
报错显示MySQLdb的扩展文件无法通过@rpath找到libmysqlclient.21.dylib,该文件实际位于/usr/local/mysql-8.0.31-macos12-x86_64/lib/,本质是@rpath未包含该路径。
解决方向
1. 临时/永久设置环境变量
- 临时启动Django时指定
DYLD_LIBRARY_PATH:DYLD_LIBRARY_PATH=/usr/local/mysql-8.0.31-macos12-x86_64/lib/ python manage.py runserver - 永久生效(添加到shell配置文件,如
~/.zshrc或~/.bash_profile):echo 'export DYLD_LIBRARY_PATH="/usr/local/mysql-8.0.31-macos12-x86_64/lib:$DYLD_LIBRARY_PATH"' >> ~/.zshrc source ~/.zshrc
2. 修改MySQLdb扩展文件的rpath
直接给_mysql.cpython-310-darwin.so添加MySQL库路径到rpath:
install_name_tool -add_rpath /usr/local/mysql-8.0.31-macos12-x86_64/lib/ /Users/mike/.virtualenvs/djangoprod/lib/python3.10/site-packages/MySQLdb/_mysql.cpython-310-darwin.so
验证修改结果:
otool -l /Users/mike/.virtualenvs/djangoprod/lib/python3.10/site-packages/MySQLdb/_mysql.cpython-310-darwin.so | grep -A 5 LC_RPATH
3. 创建软链接到系统默认库路径
将libmysqlclient.21.dylib链接到/usr/local/lib(系统会扫描该路径):
sudo ln -s /usr/local/mysql-8.0.31-macos12-x86_64/lib/libmysqlclient.21.dylib /usr/local/lib/libmysqlclient.21.dylib sudo update_dyld_shared_cache
4. 重新编译安装mysqlclient
卸载现有版本后,指定MySQL路径重新安装:
pip uninstall mysqlclient pip install mysqlclient --global-option=build_ext --global-option="-I/usr/local/mysql-8.0.31-macos12-x86_64/include" --global-option="-L/usr/local/mysql-8.0.31-macos12-x86_64/lib"
内容的提问来源于stack exchange,提问作者Mike Robinson
相关产品推荐
相关产品推荐

