python include expected 2got1,全新python 3.7 / Django 2.2.1安装无法识别已安装mysqlclient

I have a brand new django 2.2.1 project I have just installed into a python 3.7 virtualenv on OS X (10.14.4). After some frustrations I got mysqlclient to install but when I run the django dev server it doesn't recognise that it is installed:

Here are the steps I've taken so far:

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

Now, the only change I have made to the out-of-the-box django installation is to change the default database backend to django.db.backends.mysql and when I run the django server I get the following:

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.

Did you install mysqlclient?

However, going back to the virtualenv and doing "pip install mysqlclient" gives:

Requirement already satisfied: mysqlclient in /Users//.local/share/virtualenvs/-KrUE_JNo/lib/python3.7/site-packages (1.4.2.post1)

Any ideas why django can't see the mysqlclient installed in the virtualenv? I can confirm that all of the above has been run in the virtualenv. I suspect it has something to do with the faff that OSX makes you go through to install it but I'm not sure how to pick it apart.

I have also tried to replace mysqldb with pymysql as suggested here but that causes the server to give a different error:

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 is a given for this project so use of an alternative backend is not an option. Any help very gratefully received, many thanks in advance.

UPDATE: Output of 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

UPDATE 2:

Following conor's post (thanks conor) I started again with a fresh virtualenv and again successfully installed mysqlclient1.4.2.post1. Here's the output from pip freeze now:

Django==2.2.1

mysqlclient==1.4.2.post1

pytz==2019.1

sqlparse==0.3.0

Still getting the same error when I do python manage.py runserver though:

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.

Did you install mysqlclient?

UPDATE 3:

Thought I would try importing the MySQLdb module on the python command line to see if I can get any more insight and it returns the following:

>>> import MySQLdb

Traceback (most recent call last):

File "", line 1, in

File "/Users//.local/share/virtualenvs/-KrUE_JNo/lib/python3.7/site-packages/MySQLdb/__init__.py", line 18, in

from . import _mysql

ImportError: dlopen(/Users//.local/share/virtualenvs/-KrUE_JNo/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so, 2): Symbol not found: _mysql_affected_rows

Referenced from: /Users//.local/share/virtualenvs/-KrUE_JNo/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so

Expected in: flat namespace

in /Users//.local/share/virtualenvs/-KrUE_JNo/lib/python3.7/site-packages/MySQLdb/_mysql.cpython-37m-darwin.so

解决方案

SOLVED

So it looks like the issue was that on initial installation the mysqlclient library had compiled against the wrong version of mysql (not sure how that happened), so I had to force it to recompile.

Here are the steps:

brew uninstall mysql

brew uninstall myysql-connector-c

pipenv uninstall mysqlclient

brew install mysql-connector-c

At this point we need to update /usr/local/bin/mysql_config as per the instructions that conor linked to (thanks again conor), i.e. change the line that read

libs="$libs -l "

to

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"

Then finally force mysqlclient to recompile and reinstall mysql:

pip install --force-reinstall --ignore-installed --no-binary :all: mysqlclient

brew unlink mysql-connector-c

brew install mysql

Thanks to everyone who took time to help out!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值