Fresh python 3.7 / django 2.2.1 安装无法识别已安装 mysqlclient
Fresh python 3.7 / django 2.2.1 installation not recognising that mysqlclient is installed
我有一个全新的 django 2.2.1 项目,我刚刚安装到 OS X (10.14.4) 上的 python 3.7 virtualenv 中。经过一些挫折后,我安装了 mysqlclient,但是当我 运行 django 开发服务器时,它无法识别它已安装:
以下是我目前采取的步骤:
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 让你通过安装它的 faff 有关,但我不确定如何将它分开。
我也试过 但这会导致服务器给出不同的错误:
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 的 post(感谢 conor)之后,我再次使用全新的 virtualenv 开始,并再次成功安装了 mysqlclient1.4.2.post1。这是 pip freeze now 的输出:
Django==2.2.1
mysqlclient==1.4.2.post1
pytz==2019.1
sqlparse==0.3.0
当我执行 python manage.py 运行服务器时仍然出现相同的错误:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
更新 3:
我想我会尝试在 python 命令行上导入 MySQLdb 模块,看看我是否可以获得更多见解,它 returns 以下内容:
>>> 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
如果您使用的是 macOS,请执行此操作
$ brew uninstall mysql
$ brew install mysql-connector-c
$ brew unlink mysql-connector-c
$ brew install mysql
$ pip install mysql-python
并按照此处的说明进行操作:https://pypi.org/project/mysqlclient/
已解决
所以看起来问题是在初始安装时 mysql 客户端库针对错误版本的 mysql 进行了编译(不确定这是怎么发生的),所以我不得不强制执行它重新编译。
步骤如下:
brew uninstall mysql
brew uninstall myysql-connector-c
pipenv uninstall mysqlclient
brew install mysql-connector-c
此时我们需要根据 conor 链接到的说明更新 /usr/local/bin/mysql_config(再次感谢 conor),即更改读取
的行
libs="$libs -l "
到
libs="$libs -lmysqlclient -lssl -lcrypto "
然后,:
export PATH="/usr/local/opt/openssl/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
然后最后强制mysql客户端重新编译重新安装mysql:
pip install --force-reinstall --ignore-installed --no-binary :all: mysqlclient
brew unlink mysql-connector-c
brew install mysql
感谢所有花时间提供帮助的人!
从 python 3.7.4 降级到 python 3.6 为我解决了 windows 10 上的问题。
我有一个全新的 django 2.2.1 项目,我刚刚安装到 OS X (10.14.4) 上的 python 3.7 virtualenv 中。经过一些挫折后,我安装了 mysqlclient,但是当我 运行 django 开发服务器时,它无法识别它已安装:
以下是我目前采取的步骤:
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 让你通过安装它的 faff 有关,但我不确定如何将它分开。
我也试过
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 的 post(感谢 conor)之后,我再次使用全新的 virtualenv 开始,并再次成功安装了 mysqlclient1.4.2.post1。这是 pip freeze now 的输出:
Django==2.2.1
mysqlclient==1.4.2.post1
pytz==2019.1
sqlparse==0.3.0
当我执行 python manage.py 运行服务器时仍然出现相同的错误:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
更新 3: 我想我会尝试在 python 命令行上导入 MySQLdb 模块,看看我是否可以获得更多见解,它 returns 以下内容:
>>> 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
如果您使用的是 macOS,请执行此操作
$ brew uninstall mysql
$ brew install mysql-connector-c
$ brew unlink mysql-connector-c
$ brew install mysql
$ pip install mysql-python
并按照此处的说明进行操作:https://pypi.org/project/mysqlclient/
已解决
所以看起来问题是在初始安装时 mysql 客户端库针对错误版本的 mysql 进行了编译(不确定这是怎么发生的),所以我不得不强制执行它重新编译。
步骤如下:
brew uninstall mysql
brew uninstall myysql-connector-c
pipenv uninstall mysqlclient
brew install mysql-connector-c
此时我们需要根据 conor 链接到的说明更新 /usr/local/bin/mysql_config(再次感谢 conor),即更改读取
的行libs="$libs -l "
到
libs="$libs -lmysqlclient -lssl -lcrypto "
然后,
export PATH="/usr/local/opt/openssl/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
然后最后强制mysql客户端重新编译重新安装mysql:
pip install --force-reinstall --ignore-installed --no-binary :all: mysqlclient
brew unlink mysql-connector-c
brew install mysql
感谢所有花时间提供帮助的人!
从 python 3.7.4 降级到 python 3.6 为我解决了 windows 10 上的问题。