简体   繁体   English

Django - MySQL 集成 Mac M1 Max

[英]Django - MySQL intergration Mac M1 Max

I'm relatively new to Django and working on a project.我对 Django 比较陌生,正在做一个项目。 I was about to makemigrations and got the following trace:我正要进行迁移并得到以下跟踪:

demoproject lamidotijjo$ python3 manage.py makemigrations
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/MySQLdb/__init__.py", line 18, in <module>
    from . import _mysql
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/MySQLdb/_mysql.cpython-310-darwin.so, 0x0002): Library not loaded: /opt/homebrew/opt/mysql/lib/libmysqlclient.21.dylib
  Referenced from: <D6AC4B91-4AA0-31A5-AA10-DE3277524713> /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/MySQLdb/_mysql.cpython-310-darwin.so
  Reason: tried: '/opt/homebrew/opt/mysql/lib/libmysqlclient.21.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/opt/mysql/lib/libmysqlclient.21.dylib' (no such file), '/opt/homebrew/opt/mysql/lib/libmysqlclient.21.dylib' (no such file), '/usr/lib/libmysqlclient.21.dylib' (no such file, not in dyld cache)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/lamidotijjo/Python/Django/demoproject/manage.py", line 22, in <module>
    main()
  File "/Users/lamidotijjo/Python/Django/demoproject/manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
    utility.execute()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/core/management/__init__.py", line 420, in execute
    django.setup()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/apps/registry.py", line 116, in populate
    app_config.import_models()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/apps/config.py", line 269, in import_models
    self.models_module = import_module(models_module_name)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  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 "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/contrib/auth/models.py", line 3, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/contrib/auth/base_user.py", line 49, in <module>
    class AbstractBaseUser(models.Model):
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/models/base.py", line 141, in __new__
    new_class.add_to_class("_meta", Options(meta, app_label))
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/models/base.py", line 369, in add_to_class
    value.contribute_to_class(cls, name)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/models/options.py", line 231, in contribute_to_class
    self.db_table, connection.ops.max_name_length()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/utils/connection.py", line 15, in __getattr__
    return getattr(self._connections[self._alias], item)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/utils/connection.py", line 62, in __getitem__
    conn = self.create_connection(alias)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/utils.py", line 193, in create_connection
    backend = load_backend(db["ENGINE"])
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/utils.py", line 113, in load_backend
    return import_module("%s.base" % backend_name)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/django/db/backends/mysql/base.py", line 15, in <module>
    import MySQLdb as Database
  File "/Library/Frameworks/Python.framework/Versions/3.10/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

From what I could gather, from the "NameError: name '_mysql' is not defined error. I had also installed "pip3 install mysqlclient" prior to making migrations. That did not solve the issue.据我所知,“NameError: name '_mysql' is not defined error。我在进行迁移之前还安装了“pip3 install mysqlclient”。这并没有解决问题。

My settings.py for my db connection is as follows:我的数据库连接的 settings.py 如下:

DATABASES = {   
    'default': {   
        'ENGINE': 'django.db.backends.mysql',   
        'NAME': 'mydatabase',   
        'USER': 'root',   
        'PASSWORD': '',   
        'HOST': '127.0.0.1',   
        'PORT': '3306',   
        'OPTIONS': {   
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"   
        }   
    }   
}

I believe that my parameters are correct.我相信我的参数是正确的。

  1. Installed mysqlclient via pip3通过 pip3 安装 mysqlclient

  2. Verfied mysql configuration in settings.py file for django app在 django 应用程序的 settings.py 文件中验证 mysql 配置

  3. Googled Stacktrace posted for missing elements.谷歌搜索 Stacktrace 发布缺失元素。

  4. I noticed the following, error might be related to the following:我注意到以下内容,错误可能与以下内容有关:

    ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/MySQLdb/_mysql.cpython-310-darwin.so, 0x0002): Library not loaded: @rpath/libmysqlclient.21.dylib Referenced from: <1F087C56-18D4-3EC9-8718-BEA0A3ECBAE8> /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/MySQLdb/_mysql.cpython-310-darwin.so Reason: tried: '/System/Volumes/Preboot/Cryptexes/OS@rpath/libmysqlclient.21.dylib' (no such file), '/usr/lib/libmysqlclient.21.dylib' (no such file, not in dyld cache) ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/MySQLdb/_mysql.cpython-310-darwin.so, 0x0002): Library not loaded: @rpath/libmysqlclient .21.dylib 引用自:<1F087C56-18D4-3EC9-8718-BEA0A3ECBAE8> /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/MySQLdb/_mysql.cpython-310-darwin .so 原因:尝试过:'/System/Volumes/Preboot/Cryptexes/OS@rpath/libmysqlclient.21.dylib'(没有这样的文件),'/usr/lib/libmysqlclient.21.dylib'(没有这样的文件,不是在 dyld 缓存中)

Therefore, tried to create a symlink as root:因此,尝试以 root 身份创建符号链接:

ln -s /usr/local/mysql-8.0.31-macos12-arm64/lib/libmysqlclient.21.dylib /usr/lib/libmysqlclient.21.dylib ln -s /usr/local/mysql-8.0.31-macos12-arm64/lib/libmysqlclient.21.dylib /usr/lib/libmysqlclient.21.dylib

I was able to fix the issue.我能够解决这个问题。 The issue stemmed from the fact that Django was looking for the following file: "libmysqlclient.21.dylib" in the wrong location.问题源于 Django 在错误的位置寻找以下文件:“libmysqlclient.21.dylib”。 The relative path found in "_mysql.cpython-310-darwin.so" was set to the correct absolute path which on my system is found at "/usr/local/mysql-8.0.31-macos12-arm64/lib/libmysqlclient.21.dylib"在“_mysql.cpython-310-darwin.so”中找到的相对路径被设置为正确的绝对路径,在我的系统中位于“/usr/local/mysql-8.0.31-macos12-arm64/lib/libmysqlclient. 21.dylib”

Command used was:使用的命令是:

install_name_tool -change @rpath/libmysqlclient.21.dylib /usr/local/mysql-8.0.31-macos12-arm64/lib/libmysqlclient.21.dylib _mysql.cpython-310-darwin.so

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM