Macos M2 mysqlclient Символ не найден: _mysql_affected_rowsPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Macos M2 mysqlclient Символ не найден: _mysql_affected_rows

Сообщение Anonymous »

Я настраиваю новый MacBook M2 и, похоже, столкнулся с проблемой, описанной для M1 здесь:
https://github.com/PyMySQL/mysqlclient/issues/496
(tl;dr: библиотека общих объектов MySQLdb, установленная pip, и dylib mysqlclient, установленная Brew, несовместимы, по-видимому, из-за x86/arm несоответствие архитектуры, например, требуемые символы не являются общими для обоих.)
Я ломаю голову над этим уже неделю. Я попробовал несколько обходных путей, описанных в обсуждении проблемы, и не нашел ничего, что работало бы на моей машине. Я не очень хорошо разбираюсь в темах архитектуры библиотек низкого уровня, обсуждаемых в обсуждении проблемы, и надеюсь, что что-то упускаю из виду. В ветке есть много вариантов установки и выполнения с помощью Arch. Я безуспешно пытался применить многие из описанных обходных путей, но у меня такое ощущение, что я наношу удары без четкого понимания того, на что я смотрю.
python:

Код: Выделить всё

$ file $(which python)
/Users/sbrown/.virtualenvs/mypkg/bin/python: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]
/Users/sbrown/.virtualenvs/mypkg/bin/python (for architecture x86_64):  Mach-O 64-bit executable x86_64
/Users/sbrown/.virtualenvs/mypkg/bin/python (for architecture arm64):   Mach-O 64-bit executable arm64
brew установленный libmysqlclient:

Код: Выделить всё

$ file /opt/homebrew/opt/mysql-client/lib/libmysqlclient.21.dylib
/opt/homebrew/opt/mysql-client/lib/libmysqlclient.21.dylib: Mach-O 64-bit dynamically linked shared library arm64
и pip install mysqlclient привели к следующему:

Код: Выделить всё

$ file ~/.virtualenvs/mypkg/lib/python3.11/site-packages/MySQLdb/_mysql.cpython-311-darwin.so
/Users/sbrown/.virtualenvs/mypkg/lib/python3.11/site-packages/MySQLdb/_mysql.cpython-311-darwin.so: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit bundle x86_64] [arm64:Mach-O 64-bit bundle arm64]
/Users/sbrown/.virtualenvs/mypkg/lib/python3.11/site-packages/MySQLdb/_mysql.cpython-311-darwin.so (for architecture x86_64):   Mach-O 64-bit bundle x86_64
/Users/sbrown/.virtualenvs/mypkg/lib/python3.11/site-packages/MySQLdb/_mysql.cpython-311-darwin.so (for architecture arm64):    Mach-O 64-bit bundle arm64
В теме GitHub есть несколько комментариев, посвященных поиску символов | grep mysql_affected_rows, чтобы определить, является ли файл Arm64 или x86, но никто не объясняет, как это определить по выходным данным. Я проверил на более старом MacBook x86, где все это работает, и увидел тот же результат, что показан ниже, который соответствует выводу, показанному в ветке GitHub.
❓ Можно ли что-нибудь сказать? подробнее об архитектуре вывода символов что только из файла?

Код: Выделить всё

$ symbols /opt/homebrew/opt/mysql-client/lib/libmysqlclient.21.dylib | grep mysql_affected_rows
0x0000000000011c98 (     0x8) mysql_affected_rows [FUNC, EXT, NameNList, MangledNameNList, Merged, NList, FunctionStarts]

$ symbols ~/.virtualenvs/llatitude/lib/python3.11/site-packages/MySQLdb/_mysql.cpython-311-darwin.so | grep mysql_affected_rows
0x0000000000006dcc (     0xc) DYLD-STUB$$mysql_affected_rows [DYLD-STUB, LENGTH, NameNList, MangledNameNList, NList]
❓ Кроме того, поскольку некоторые из приведенных выше файлов имеют универсальную архитектуру, что определяет, какая архитектура выбрана? После каждой из многих попыток обходного пути я пробовал команду «canary», показанную ниже, запуская Python под обеими версиями Arch, с той же неудачей:

Код: Выделить всё

$ arch -arm64 python -c 'import MySQLdb'
Traceback (most recent call last):
File "", line 1, in 
File "/Users/sbrown/.virtualenvs/mypkg/lib/python3.11/site-packages/MySQLdb/__init__.py", line 17, in 
from . import _mysql
ImportError: dlopen(/Users/sbrown/.virtualenvs/mypkg/lib/python3.11/site-packages/MySQLdb/_mysql.cpython-311-darwin.so, 0x0002): symbol not found in flat namespace '_mysql_affected_rows'

$ arch -x86_64 python -c 'import MySQLdb'
Traceback (most recent call last):
File "", line 1, in 
File "/Users/sbrown/.virtualenvs/mypkg/lib/python3.11/site-packages/MySQLdb/__init__.py", line 17, in 
from .  import _mysql
ImportError: dlopen(/Users/sbrown/.virtualenvs/mypkg/lib/python3.11/site-packages/MySQLdb/_mysql.cpython-311-darwin.so, 0x0002): symbol not found in flat namespace '_mysql_affected_rows'
❓ Означает ли приведенная выше ошибка, что символ не найден в .so в виртуальном окружении? Или этот общий объект вызывает какую-то другую внешнюю библиотеку и не находит символ? otool -tV показывает:

Код: Выделить всё

$ otool -tV ~/.virtualenvs/mypkg/lib/python3.11/site-packages/MySQLdb/_mysql.cpython-311-darwin.so | grep mysql_affected_rows
0000000000005711    callq   0x70b8                          ## symbol stub for: _mysql_affected_rows
0000000000004cc0    bl  0x6dcc ; symbol stub for: _mysql_affected_rows
Есть ли здесь очевидный путь, который я не замечаю? Мне кажется маловероятным, что что-то столь базовое на данный момент останется фундаментально сломанным, но я не уверен, что делать дальше.

Подробнее здесь: https://stackoverflow.com/questions/765 ... ected-rows
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Mysqlclient не найден даже после установки в Django на MacOS
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Mysqlclient не найден даже после установки в Django на MacOS
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Ошибка C# MySQL: MySql.Data.MySqlClient.MySqlException (0x80004005): ожидаемый конец пакета данных
    Anonymous » » в форуме C#
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Ошибка C# MySQL: MySql.Data.MySqlClient.MySqlException (0x80004005): ожидаемый конец пакета данных
    Anonymous » » в форуме C#
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • Выброшено исключение: «MySql.Data.MySqlClient.MySqlException» в MySql.Data.dll
    Anonymous » » в форуме C#
    0 Ответы
    49 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»