Django ImportError:dlopen(_mysql.cpython-310-darwin.so,0x0002):在平面命名空间'_mysql_affected_rows'中找不到符号

问题描述 投票:0回答:1

我正在使用 M2 芯片 的 Macbook AIR 上使用 MySQL 为我的 Django 项目设置本地工作区。所有配置均使用 OSX 迁移助手从我的旧 Macbook Pro(配备 core i7)迁移。

我在尝试在本地运行服务器时遇到问题,即

python manage.py runserver
。错误消息是:

  File "/Users/.../.venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py", line 15, in <module>
    import MySQLdb as Database
  File "/Users/.../.venv/lib/python3.10/site-packages/MySQLdb/__init__.py", line 24, in <module>
    version_info, _mysql.version_info, _mysql.__file__
NameError: name '_mysql' is not defined
  • MySQL 服务器已在我的本地设置并且工作正常。
  • 我能够使用 mysql 连接到我的本地 MySQL 服务器,即
    mysql -u root -p
  • mysqlclient
    已安装,版本为
    2.1.1
  • 直接使用 python 控制台导入
    MySQLdb
    时,Python 似乎很难使用
    dlopen
    打开“c 编译”(不确定这到底是如何调用的)文件,或者打开但有错误?错误为:
Python 3.10.6 (v3.10.6:9c7b4bd164, Aug  1 2022, 17:13:48) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
Traceback (most recent call last):
  File "/Users/.../.venv/lib/python3.10/site-packages/MySQLdb/__init__.py", line 18, in <module>
    from . import _mysql
ImportError: dlopen(/Users/.../.venv/lib/python3.10/site-packages/MySQLdb/_mysql.cpython-310-darwin.so, 0x0002): symbol not found in flat namespace '_mysql_affected_rows'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/.../.venv/lib/python3.10/site-packages/MySQLdb/__init__.py", line 24, in <module>
    version_info, _mysql.version_info, _mysql.__file__
NameError: name '_mysql' is not defined
  • 尝试在不使用缓存的情况下卸载并重新安装:
    python -m pip download mysqlclient==2.1.1 --no-binary :all:
    ,没有运气。
  • 尝试升级mysqlclient(已安装2.2.0.2),Django直接询问是否安装了mysqlclient。

谢谢您的提前!

python django mysql-python apple-silicon
1个回答
0
投票

我也遇到这个问题了

MacOS 13.4.1 Python 3.10.0

我不小心使用brew升级到MySQL 8.1,libmysqlclient.21.dylib不再存在,而是libmysqlclient.22.dylib。我的 mysql 和 mysql-client 都在使用这个新的 dylib 文件。

看来mysqlclient==2.2.0仍在寻找libmysqlclient.21.dylib。

我尝试恢复到 MySQL 8.0.34,但现在我的数据库失败,表示由于升级而无法再恢复: “[InnoDB] 无法在版本 80100 构建的数据目录上启动服务器版本 80034。不支持降级”

--

我已经在 PyMySQL github 上展开了关于它的讨论: https://github.com/PyMySQL/mysqlclient/discussions/652

© www.soinside.com 2019 - 2024. All rights reserved.