(MacOS) Django не может найти драйвер MySQL ... но почему?

Вот трассировка:

Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/Users/mike/.virtualenvs/djangoprod/lib/python3.10/site-packages/MySQLdb/__init__.py", line 18, in <module>
    from . import _mysql
ImportError: dlopen(/Users/mike/.virtualenvs/djangoprod/lib/python3.10/site-packages/MySQLdb/_mysql.cpython-310-darwin.so, 0x0002): Library not loaded: '@rpath/libmysqlclient.21.dylib'
  Referenced from: '/Users/mike/.virtualenvs/djangoprod/lib/python3.10/site-packages/MySQLdb/_mysql.cpython-310-darwin.so'
  Reason: tried: '/usr/lib/libmysqlclient.21.dylib' (no such file)

И вот в чем проблема:

$ locate libmysqlclient
[...]
/usr/local/mysql-8.0.31-macos12-x86_64/lib/libmysqlclient.21.dylib

Итак, библиотека есть, но Django ее не находит. Итак, прежде чем я "бесполезно буду биться головой об эту штуку", особенно учитывая, что она раньше работала, может ли кто-нибудь любезно подтолкнуть меня в правильном направлении? Что я здесь упускаю?

Я особенно замечаю, что пакет пробует путь, /usr/lib... когда это на самом деле не является правильным расположением здесь.

В частности: Я вижу в тексте ссылку на @rpath, которая, я уверен, является первопричиной проблемы - очевидно, значение неверно. (Я заметил, что в нем правильно указано имя библиотеки). Я откровенно не знаком с этой штукой, и что именно ее задает.@rpath

Заранее благодарю...

Простите, что задавал этот вопрос так много раз...

Оказалось, что защита целостности системы (SIP) была первопричиной проблемы. Ее отключение привело к тому, что библиотека была найдена, как только она была добавлена с помощью export DYLD_LIBRARY_PATH ...etc...

Инструкции и объяснения можно найти здесь: https://developer.apple.com/documentation/security/disabling_and_enabling_system_integrity_protection

Согласно сайту разработчиков Apple, это приводит к тому, что значение DYLD_LIBRARY_PATH запрещается дочерним процессам. И, очевидно, интерфейс Python для MySQL должен где-то его использовать. (Каким образом такая странная вещь будет способствовать "целостности системы", мне совершенно непонятно, но у Apple должны быть свои причины. ...)

FYI: Я также узнал на странице man dyld компании Apple, что означает @RPATH и откуда берется его значение.

Вернуться на верх