【发布时间】:2019-09-30 13:54:02
【问题描述】:
我有一个全新的 django 2.2.1 项目,我刚刚安装到 OS X (10.14.4) 上的 python 3.7 virtualenv 中。经过一些挫折后,我安装了 mysqlclient,但是当我运行 django dev 服务器时,它无法识别它已安装:
以下是我目前采取的步骤:
brew install mysql
pipenv --three
pipenv install django==2.2.1
pipenv install mysqlclient
brew uninstall mysql
brew install mysql-connector-c
pipenv install mysqlclient
brew unlink mysql-connector-c
brew install mysql
django-admin startproject projectname
现在,我对开箱即用的 django 安装所做的唯一更改是将默认数据库后端更改为 django.db.backends.mysql,当我运行 django 服务器时,我得到以下信息:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
但是,回到 virtualenv 并执行“pip install mysqlclient”会得到:
Requirement already satisfied: mysqlclient in /Users/<username>/.local/share/virtualenvs/<projectname>-KrUE_JNo/lib/python3.7/site-packages (1.4.2.post1)
任何想法为什么 django 看不到安装在 virtualenv 中的 mysqlclient?我可以确认以上所有内容都已在 virtualenv 中运行。我怀疑这与 OSX 让您安装它时遇到的问题有关,但我不知道如何将它分开。
我也尝试过replace mysqldb with pymysql as suggested here,但这会导致服务器给出不同的错误:
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
Mysql 是这个项目的一个给定的,所以使用替代后端不是一个选项。非常感谢您的任何帮助,非常感谢。
更新:pip freeze 的输出:
Django==2.2.1
django-auth-ldap==1.7.0
Markdown==3.1
mysql-connector-python==8.0.16
mysqlclient==1.4.2.post1
protobuf==3.7.1
pyasn1==0.4.5
pyasn1-modules==0.2.5
PyMySQL==0.9.3
pyodbc==4.0.26
python-ldap==3.2.0
pytz==2019.1
simplejson==3.16.0
six==1.12.0
sqlparse==0.3.0
xmltodict==0.12.0
更新 2: 在 conor 的帖子(感谢 conor)之后,我再次使用新的 virtualenv 开始,并再次成功安装了 mysqlclient1.4.2.post1。这是 pip freeze 现在的输出:
Django==2.2.1
mysqlclient==1.4.2.post1
pytz==2019.1
sqlparse==0.3.0
当我执行 python manage.py runserver 时仍然遇到同样的错误:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
更新 3: 以为我会尝试在 python 命令行上导入 MySQLdb 模块,看看我是否可以得到更多的见解,它会返回以下内容:
>>> import MySQLdb
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/<username>/.local/share/virtualenvs/<projectname>-KrUE_JNo/lib/python3.7/site-packages/MySQLdb/__init__.py", line 18, in <module>
from . import _mysql
ImportError: dlopen(/Users/<username>/.local/share/virtualenvs/<projectname>-KrUE_JNo/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so, 2): Symbol not found: _mysql_affected_rows
Referenced from: /Users/<username>/.local/share/virtualenvs/<projectname>-KrUE_JNo/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so
Expected in: flat namespace
in /Users/<username>/.local/share/virtualenvs/<projectname>-KrUE_JNo/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so
【问题讨论】:
-
你能展示一下你是如何运行 Django 的吗?
-
嗨@GwynBleidD - 对不起,我应该考虑添加。我只是在做 ./manage.py runserver - 还是在 virtualenv 中
-
你的 virtualenv 的 pip freeze 的输出是什么?
-
点冻结输出(自发布问题以来我已经安装了一些不相关的软件包):Django==2.2.1 django-auth-ldap==1.7.0 Markdown==3.1 mysql-connector- python==8.0.16 mysqlclient==1.4.2.post1 protobuf==3.7.1 pyasn1==0.4.5 pyasn1-modules==0.2.5 PyMySQL==0.9.3 pyodbc==4.0.26 python-ldap= =3.2.0 pytz==2019.1 simplejson==3.16.0 六==1.12.0 sqlparse==0.3.0 xmltodict==0.12.0
-
安装这个版本的mysqlclient 1.3.13,因为错误消息提示,你有这个版本你有0.9.3。你读过邮件吗?
标签: mysql django python-3.x macos pipenv