MacOS 13.4(M1芯片)Python应用MySQLdb模块缺失问题求助
解决M1 MacOS 13.4下SQLAlchemy找不到MySQLdb的问题
问题描述
启动Python应用时抛出如下错误:
Traceback (most recent call last): File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/Users/xiaoqiangjiang/source/dolphin/visa/task/refresh_token.py", line 5, in <module> from apps.visa.db.visa_sys_config import VisaSysConfig File "/Users/xiaoqiangjiang/source/dolphin/visa/apps/visa/db/visa_sys_config.py", line 4, in <module> from apps.visa.db.base.database_service import Base, session_scope File "/Users/xiaoqiangjiang/source/dolphin/visa/apps/visa/db/base/database_service.py", line 13, in <module> engine = create_engine(url_default, connect_args={'charset':'utf8'}) File "<string>", line 2, in create_engine File "/Users/xiaoqiangjiang/source/dolphin/visa/venv/lib/python3.10/site-packages/sqlalchemy/util/deprecations.py", line 281, in warned return fn(*args, **kwargs) # type: ignore[no-any-return] File "/Users/xiaoqiangjiang/source/dolphin/visa/venv/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 601, in create_engine dbapi = dbapi_meth(**dbapi_args) File "/Users/xiaoqiangjiang/source/dolphin/visa/venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 152, in import_dbapi return __import__("MySQLdb") ModuleNotFoundError: No module named 'MySQLdb'
已尝试pdm add mysqlclient、pdm add PyMySQL但问题未解决;尝试安装mysql-python时因Python版本兼容问题失败,安装configparser也无法解决该错误。
原因分析
mysql-python是仅支持Python2的老旧包,Python3中ConfigParser已更名为configparser,因此安装失败。- 安装PyMySQL后,SQLAlchemy默认仍尝试使用MySQLdb作为驱动,未切换到PyMySQL。
- M1芯片上安装mysqlclient需要额外配置编译依赖,直接安装会失败。
解决方案
方案一:使用PyMySQL作为驱动(简单无编译)
- 确保已安装PyMySQL:
pdm add PyMySQL - 修改数据库连接URL,将原有的
mysql://前缀改为mysql+pymysql://,例如:
原URL:mysql://user:password@host:port/dbname
修改后:mysql+pymysql://user:password@host:port/dbname - 重启应用,SQLAlchemy会自动使用PyMySQL连接数据库。
方案二:安装mysqlclient(C扩展,性能更好)
- 先安装编译依赖:
brew install mysql openssl - 设置环境变量,让编译器找到openssl:
export LDFLAGS="-L$(brew --prefix openssl)/lib" export CPPFLAGS="-I$(brew --prefix openssl)/include" export PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" - 安装mysqlclient:
pdm add mysqlclient - 无需修改连接URL,直接重启应用即可。
清理无效依赖
先移除冲突的mysql-python包:
pdm remove mysql-python
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

