Django - ошибка установки mysqlclient: требуется mysqlclient 1.3.13 или новее; у тебя 0.9.3

Я просмотрел форумы, но не нашел ответа или даже какой-либо документации по этому вопросу. Попытка воссоздать сайт, например www.testandtrack.io

При запуске команды:

python manage.py inspectdb

Я получаю ошибка:

mysqlclient 1.3.13 or newer is required; you have 0.9.3

Я пробовал все предложенные исправления, включая: -обновление пипа -установка другого колеса (32 бит вместо 64), а именно mysqlclient-1.4.2-cp37-cp37m-win32.whl командой pip install mysqlclient-1.4.2-cp37-cp37m-win32.whl (это прекрасно работает без ошибка, но не выполняет требуемую работу!)

Моя цель — просто подключить устаревшую базу данных mysql (работающую внутри XAMPP и myphpadmin) к Django. Я следил за документацией, в которой отсутствует необходимость установки mysqlclient, и застрял на этом этапе.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
40
0
66 873
14
Перейти к ответу Данный вопрос помечен как решенный

Ответы 14

  1. Установить колесо:

    Пип установить колесо

  2. Загрузите нужный файл отсюда: https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python

  3. Перейдите в каталог «Загрузки» (думаю, это будет cd Downloads)

  4. Установите загруженный файл с помощью: pip install <file name>

ПРЕДУПРЕЖДЕНИЕ!! Вы НЕ МОЖЕТЕ изменить имя загруженного файла .whl. Он содержит некоторую информацию, которая требуется для установки.

Спасибо - хорошее предложение, поскольку оно показывает странность этого. При удалении и повторной установке появляется сообщение «Требование уже выполнено: mysqlclient in c:\users\marvins\envs\djangottio\lib\site-packages (1.4.2)», но следующая ошибка все еще возникает при попытке запустить команду проверки : Неправильно настроено: требуется mysqlclient 1.3.13 или новее; у вас 0.9.3.

Compoot 12.04.2019 20:52

Нужно ли выходить из виртуальной среды?

Compoot 12.04.2019 20:53

Я попробовал еще раз, создав новый VENV .... при попытке установить «pip install mysqlclient», теперь возникла эта ошибка! ошибка: требуется Microsoft Visual C++ 14.0. Получите его с помощью «Инструментов сборки Microsoft Visual C++»: visualstudio.microsoft.com/downloads

Compoot 12.04.2019 20:57

Я думаю, что виртуальная среда здесь не имеет значения. Но вы можете попробовать это (скажите мне, работает ли это, поэтому я отредактирую свой ответ): установите колесо pip, затем загрузите интересующий вас .whl отсюда: lfd.uci.edu/~gohlke/pythonlibs/#mysql-python. А затем cd загружает && (если вы используете python3): pip install mysqlclient-1.3.8-cp36-cp36m-win_amd64.whl (если вы используете python2: pip install mysqlclient-1.3.8-cp27-cp27m-win_amd64.whl )

Dolidod Teethtard 12.04.2019 20:58

Я не понимаю, что вы просите меня сделать. Если вы прочтете мое обновление, то увидите, что я уже пытался установить колесо. Удаление pip, а также переустановка колеса. Тем не менее, та же ошибка

Compoot 12.04.2019 20:59

Я напишу это в ответ, я думаю, что я уверен, что это сработает

Dolidod Teethtard 12.04.2019 21:01

Я не очень хорошо знаком с окнами... Но я думаю, что вы можете просто удалить каталог, который отображается по ошибке... Худшее, что может случиться, это то, что вам придется переустановить python и pip.

Dolidod Teethtard 12.04.2019 21:09

Я уже сделал то, что вы предложили, поэтому не могу принять это как ответ. (см. мой вопрос и обновление!). Это не работает. Спасибо хоть

Compoot 12.04.2019 21:13
Ответ принят как подходящий

Вот как я это исправил.

Перейдите в каталог установки django/db/backends/mysql. Проверьте свой путь в сообщении об ошибке.

Я использую pipenv, поэтому мой путь:

/home/username/.local/share/virtualenvs/project-env/lib/python3.7/site-packages/django/db/backends/mysql

Если вы используете традиционный env, ваш путь будет таким:

<env_directory_name>/Lib/site-packages/django/db/base.py

Откройте файл base.py и найдите:

version = Database.version_info

Поместите проходить внутри строки if и комментария:

raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.version)

Так.

if version < (1, 3, 13):
   pass
   '''
   raise ImproperlyConfigured(
       'mysqlclient 1.3.13 or newer is required; you have %s.'
       % Database.__version__
   )
   '''

Сохраните, закройте этот файл и откройте файлoperations.py.

Ищи:

query = query.decode(errors='replace')

и измените декодирование на кодирование

query = query.encode(errors='replace')

Теперь попробуйте запустить сервер.

@редактировать

До этого ответа я не нашел другого способа решить эту проблему. Сегодня есть лучшие способы справиться с этой проблемой. Этот отвечать имеет лучший подход.

Это сработало, но есть ли другие способы? Я имею в виду, как это исправить на реальном сервере, на котором у нас может не быть доступа к этим файлам.?

Krishnadas PC 13.06.2019 14:50

@KrishnadasPC, вы нашли какие-нибудь решения?

nesalexy 16.06.2019 13:10

Других решений для меня не нашел. Из-за этой проблемы я перешел на nodejs, и настройка для django кажется очень сложной, по крайней мере, для меня.

Krishnadas PC 16.06.2019 13:13

@KrishnadasPC Предлагается подключиться к вашему серверу через SSH и использовать VIM для изменения файлов.

Diego Magalhães 26.06.2019 14:08

Настоящий сервер @KrishnadasPC, использующий django, будет иметь доступ к этим файлам. Я запускаю django в контейнере, и я обошел эту проблему, заменив «Database.version_info» на «(2,0,0)», чтобы пропустить оператор if, который вызывает повышение. bash-скрипт выглядит так: sed -i "s/Database.version_info/(2,0,0)/g" /usr/local/lib/python3.6/site-packages/django/db/backends/my‌​sql/base.py

user6662462 18.07.2019 00:47

Это не сработало для меня. По какой-то причине он вызывает файл, которого нет на моем компьютере. Я не могу найти его, но он все еще вызывается и дает мне эту ошибку.

Agent Lu 05.10.2019 21:07

Вы не должны исправлять, редактируя файлы, следуйте приведенным ниже инструкциям stackoverflow.com/a/59591269/521586, которые намного чище и устойчивее, когда Django обновляется или прозрачны, когда кто-то пытается понять вашу настройку.

RuiDC 22.05.2020 09:36

У меня была та же проблема, поскольку была установлена ​​​​более низкая версия mysqlclient из-за pymysql.

ОС: Линукс Минт 19.1

Питон: 3.6.8

Джанго: 2.2.2

  1. Удалите mysqlclient: pip3 uninstall mysqlclient
  2. Удалите pymysql: pip3 uninstall pymysql
  3. Установите mysqlclient: pip3 install mysqlclient

У меня была аналогичная проблема, я получал

"django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 1.3.12."

Итак, я пошел в C:\Users\username\Envs\env\Lib\site-packages\django\db\backends\mysql, открыл base.py и изменил эту строку...

if version < (1, 3, 13): 

к...

if version < (1, 3, 10):

это версия меньше моей, и это сработало.

Вместо редактирования внутренней конфигурации попробуйте обновить версию mysqlclient.

pip3 install -U mysqlclient

Я попытался обновить mysqlclient, но ошибка связана с зависимостью pymysql. Обратите внимание, что последний выпуск pymysql — это именно то, на что указывает ошибка django (0.9.3).

Diego Magalhães 02.08.2019 16:01

Если для вас не критично, как вариант, просто понизьте свой django framework с 2.2.2(например) до 2.1.

эта проблема возникает, когда вы создаете проект Django в pycharm по умолчанию. Это вызвано тем, что версия django по умолчанию — 2.2.6, поэтому просто понизьте версию django до 2.1.7, и ошибка в терминале исчезнет.

pip install Django==2.1.7

это все!

На гитхабе такая же проблема. Решение, которое идеально подходит для меня, это здесь.

Я просто цитирую автора:

I first pip uninstall pymysql (as it seems it doesn't work anymore)

Then I've used pip install mysqlclient

Last, I checked all my "pymysql" imports and deleted them.

Обязательно зайдите и нажмите кнопку «Мне нравится» в комментарии по ссылке.

Я предполагаю, что ваш проект использует pymysql вместо mysqlclient.

Вы можете попробовать найти следующий фрагмент кода в своем проекте. Если вы найдете его, попробуйте следующие способы решения этой проблемы:

import pymysql
pymysql.install_as_MySQLdb()

Вставьте строку кода между этими двумя, чтобы она выглядела так:

import pymysql
pymysql.version_info = (1, 3, 13, "final", 0)
pymysql.install_as_MySQLdb()

Затем попробуйте запустить свой проект.

  • Почему я знаю, что вы используете pymysql? Потому что 0.9.3 — это последняя версия pymysql.
  • Зачем использовать pymysql вместо mysqlclient для проекта? Потому что его проще установить. pymysql не зависит от системных библиотек, тогда как mysqlclient полагается на ряд системных библиотек, таких как libmysqlclient-dev.
  • Почему mysqlclient сложно установить, а Django по-прежнему использует его по умолчанию? Потому что mysqlclient быстрее и работает лучше. Поэтому, если ваш проект предъявляет высокие требования к производительности, я предлагаю вам удалить совместимый код выше и установить mysqlclient в свой проект. Если вам нужна помощь во время установки mysqlclient, перейдите по этой ссылке: Как установить модуль Python MySQLdb с помощью pip? и убедитесь, что libssl-dev был установлен до pip install mysqlclient.

Если вы используете centos7, yum install mysql-devel требуется перед установкой pip mysqlclient.

WisZhou 10.02.2020 06:58

На сегодняшний день я обнаружил, что вам нужно обновить версию таким образом до 1.4.2. pymysql.version_info = (1, 4, 2, "final", 0)

sfdurbano 07.10.2020 15:54

Я долго искал решение этой проблемы. Я использовал Ubuntu 18.04 и нашел это решение полезным для версии Python 3.7.5.

Шаг 1. Установите libpython3.7-dev через sudo apt-get install

> sudo apt-get install libpython3.7-dev

Шаг 2: Установите mysqlclient

> python3 -m pip install mysqlclient==1.4.6

У меня сейчас такая же проблема, и я до сих пор не могу ее исправить. У меня ошибка при выполнении второй команды: Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-z_tudjri/mysqlclient/

nick 03.04.2020 12:59

Ваши инструменты настройки могут быть устаревшими. Запустите pip install --upgrade setuptools и проверьте, работает ли это.

girishsaraf03 03.04.2020 14:03

Да, это правда. Я только что обновил пакет setuptools и успешно установил пакет mysqlclient. Спасибо

nick 03.04.2020 14:15

Следующее решение работает в Django 3.2.3, чтобы избавиться от «требуется mysqlclient 1.3.13 или новее; у вас проблема 0.9.3':

1) pip uninstall mysqlclient # remove old version 2) pip install mysqlclient==1.3.13 3) comment or remove the old workaround in __init__.py of the main app.

# workaround django.core.exceptions.ImproperlyConfigured: #Error loading MySQLdb module. #Did you install mysqlclient? #import pymysql #pymysql.install_as_MySQLdb()

Если вы работаете с Django в Ubuntu, я предлагаю вам сделать следующее, чтобы решить проблему, а не редактировать файлы конфигурации, специфичные для django.

выполните следующие команды в терминале

  1. sudo apt-get install python3-dev default-libmysqlclient-dev build-essential

  2. pip установить mysqlclient

У меня все работало нормально, просто откройте settings.py и включите

 import pymysql
 pymysql.version_info = (1, 4, 6, 'final', 0)
 pymysql.install_as_MySQLdb()

Недооцененный комментарий. Это работает как шарм!

Vijay Kumar Kanta 01.01.2021 16:34

Перейдите в каталог вашей виртуальной среды, такой как мой:

C:\Users\user\.virtualenvs\RPA-Orchestrator-Backend-GwIL98hN\Lib\site-packages\django\db\backends\mysql\base.py

Здесь вы можете отредактировать одну строку, чтобы избежать ошибки в файле base.py,

version = Database.version_info
if version < (0, 9, 3):
   raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

Тогда ваша проблема может решиться.

Другие вопросы по теме