回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>当从Django默认使用的默认SQLite更改为MySQL数据库时,我在尝试运行<code>python manage.py migrate --database mysql</code>时遇到了一个棘手的错误:</p>
<pre><code>Traceback (most recent call last):
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 15, in <module>
import MySQLdb as Database
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/MySQLdb/__init__.py", line 18, in <module>
import _mysql
ImportError: dlopen(/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/_mysql.cpython-37m-darwin.so, 2): Library not loaded: @rpath/libmysqlclient.21.dylib
Referenced from: /Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/_mysql.cpython-37m-darwin.so
Reason: image not found
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 20, in <module>
execute_from_command_line( sys.argv )
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/django/core/management/base.py", line 316, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/django/core/management/base.py", line 350, in execute
self.check()
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/django/core/management/base.py", line 379, in check
include_deployment_checks=include_deployment_checks,
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/django/core/management/commands/migrate.py", line 59, in _run_checks
issues = run_checks(tags=[Tags.database])
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/django/core/checks/registry.py", line 71, in run_checks
new_errors = check(app_configs=app_configs)
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/django/core/checks/database.py", line 9, in check_database_backends
for conn in connections.all():
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/django/db/utils.py", line 217, in all
return [self[alias] for alias in self]
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/django/db/utils.py", line 217, in <listcomp>
return [self[alias] for alias in self]
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/django/db/utils.py", line 202, in __getitem__
backend = load_backend(db['ENGINE'])
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/django/db/utils.py", line 110, in load_backend
return import_module('%s.base' % backend_name)
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/Users/xoadra/Programming/Syntax/Python/Environments/pfitzer/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 20, in <module>
) from err
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
</code></pre>
<p>我已经通过<code>pip install mysqlclient</code>安装了mysqlclient,并通过自制的<code>brew install mysql-connector-c</code>安装了它的连接器,因此这是一个令人费解的错误。<a href="https://pypi.org/project/mysqlclient/" rel="nofollow noreferrer">Even after following the connector instructions</a>通过修改连接器bin文件夹中的<code>mysql_config</code>文件,我仍然遇到了这个问题。这似乎至少与我运行macOS有点关系,因为有关于这个连接器已知错误的文档。在</p>
<p>在进一步检查堆栈跟踪之后,我注意到了顶部附近的<code>Library not loaded: @rpath/libmysqlclient.21.dylib</code>错误。不久之后,我发现了另一个可能的线索:<code>Reason: image not found</code>,但我不太确定这是什么意思。在</p>
<p>我确实在<code>/usr/local/Cellar/mysql-connector-c</code>中查看了我安装的连接器是否有任何可能丢失的东西,果然,<code>libmysqlclient.21.dylib</code>文件丢失了。取而代之的是我认为文件的旧版本,因为它被命名为<code>libmysqlclient.18.dylib</code>。出于好奇,我复制了MySQL安装附带的<code>.dylib</code>,并用相同的名称将该副本移动到连接器的文件夹和<code>/usr/local/lib</code>中,在那里我还发现了另一个<code>libmysqlclient.18.dylib</code>文件。但是,我的迁移仍然失败,但是我得到了一个稍微不同的堆栈跟踪:</p>
^{pr2}$
<p>这次我得到了以下错误:</p>
<pre><code>Reason: no suitable image found. Did find:
/usr/local/lib/libmysqlclient.21.dylib: file too short
/usr/local/lib/libmysqlclient.21.dylib: file too short
</code></pre>
<p>因此,我怀疑这个问题可能与MySQL连接器安装的<code>.dylib</code>版本有关,但我不确定如何确切地修复这个问题。我确实觉得很奇怪,简单地复制一个文件就可以稍微改变我的堆栈跟踪,所以我想我应该对此进行更多的研究。思想?在</p>