Как установить MySQLdb (библиотека доступа к данным Python для MySQL) в Mac OS X?

99

Я новичок в Python, но я только что потратил день на разработку того, как заставить MySQLdb работать должным образом, и вселенная, согласно Google, включает в себя многочисленные ссылки на то, что это такое PITA, и чрезмерное количество руководств, которые кажутся устаревший. Учитывая, что этот сайт предназначен для решения такого рода проблем, и я знаю, что мне понадобится ссылка на решение в будущем, я собираюсь задать вопрос, дать свой ответ и посмотреть, что еще попадает в поверхность.

Итак, вопрос в том, как заставить MySQLdb работать в Mac OS X?

mblackwell8
источник

Ответы:

133

Обновление для тех, кто использует Python3: вы можете просто использовать conda install mysqlclientдля установки библиотек, необходимых для использования MySQLdb в том виде, в котором он существует в настоящее время. Следующий вопрос SO был полезной подсказкой: Python 3 ImportError: Нет модуля с именем ConfigParser . Установка mysqlclient установит mysqlclient, mysql-connector и llvmdev (по крайней мере, он установил эти 3 библиотеки на моем компьютере).

Вот рассказ о моем бессвязном опыте решения этой проблемы. Хотелось бы увидеть его отредактированным или обобщенным, если вы лучше разбираетесь в проблеме ... примените немного этой ТАКОЙ магии.

Примечание: комментарии в следующем абзаце относятся к Snow Leopard, но не к Lion, который, по-видимому, требует 64-битного MySQL.

Во-первых, автор (все еще?) MySQLdb говорит здесь, что одна из самых пагубных проблем заключается в том, что OS X поставляется с 32-битной версией Python, но большинство средних пользователей (включая меня), вероятно, переходят к установке 64-битной версии. MySQL. Плохой ход ... удалите 64-битную версию, если вы ее установили (инструкции по этой неудобной задаче доступны на SO здесь ), затем загрузите и установите 32-битную версию (пакет здесь )

Существует множество пошаговых инструкций по созданию и установке библиотек MySQLdb. У них часто есть тонкие различия. это показалось мне самым популярным и обеспечило рабочее решение. Я воспроизвел его с парой правок ниже

Шаг 0: Прежде чем начать, я предполагаю, что на Mac установлены MySQL, Python и GCC .

Шаг 1. Загрузите последнюю версию адаптера MySQL для Python с SourceForge.

Шаг 2: Извлеките загруженный пакет:

tar xzvf MySQL-python-1.2.2.tar.gz

Шаг 3: Внутри папки очистите пакет:

sudo python setup.py clean

ПАРА ДОПОЛНИТЕЛЬНЫХ ШАГОВ, (из этого комментария )

Шаг 3b: Удалите все из каталога MySQL-python-1.2.2 / build / * - не доверяйте "python setup.py clean" сделать это за вас.

Шаг 3c: Удалите яйцо в Users / $ USER / .python-egg

Шаг 4: Изначально требовалось редактировать _mysql.c, но теперь НЕ НУЖНО. Сообщество MySQLdb, похоже, исправило эту ошибку.

Шаг 5: Создайте символическую ссылку в lib, чтобы указать на подкаталог с именем mysql. Это то, что он ищет во время компиляции.

sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

Шаг 6: Отредактируйте setup_posix.py и измените следующее

mysql_config.path = "mysql_config"

к

mysql_config.path = "/ usr / local / mysql / bin / mysql_config"

Шаг 7. В том же каталоге перестройте свой пакет (игнорируйте предупреждения, которые приходят с ним)

sudo python setup.py build

Шаг 8: Установите пакет, и все готово.

sudo python setup.py install

Шаг 9: Проверьте, работает ли он. Это работает, если вы можете импортировать MySQLdb.

python

>>> import MySQLdb

Шаг 10: Если при попытке импорта вы получаете сообщение об ошибке, Library not loaded: libmysqlclient.18.dylibзаканчивающееся на:, Reason: image not foundвам необходимо создать одну дополнительную символическую ссылку:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

После этого вы сможете import MySQLdbобойтись без ошибок.

И последний недостаток заключается в том, что если вы запустите Python из каталога сборки, вы получите следующую ошибку:

/Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.py:3: UserWarning: модуль _mysql уже импортирован из /Library/Python/2.5/ site-packages / MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg / _mysql.pyc, но XXXX / MySQL-python-1.2.3c1 добавляется в sys.path

Это довольно просто для Google, но чтобы избавить вас от неприятностей, вы окажетесь здесь (а может, и нет ... не особенно перспективный URL) и поймете, что вам нужноcd .. выйти из каталога сборки, и ошибка должна исчезнуть.

Как я уже писал вверху, мне бы хотелось, чтобы этот ответ был обобщен, поскольку существует множество других конкретных примеров этой ужасной проблемы. Отредактируйте или дайте свой собственный, лучший ответ.

mblackwell8
источник
1
Обратите внимание, что поставляемый Apple Python на 10.6 (Snow Leopard) предпочитает работать с 64-разрядной версией (это 32-разрядная / 64-разрядная универсальная версия). Есть и другие подводные камни. Некоторое время в серии mysql 5.1.x архивы OS X, упакованные mysql, были неисправны (утверждали, что они универсальны, но не были). Адаптер базы данных для Python, MySQLdb, имел свои проблемы. Это тот случай, когда вам рекомендуется просто использовать MacPorts для автоматического создания всего, что вам нужно. Слишком легко что-то пойти не так.
Нед Дейли,
Я собираюсь оставить это здесь на случай, если это поможет кому-нибудь еще. Мне также пришлось изменить site.cfg, чтобы установить mysql_config на правильный путь. Я не думаю, что изначально у него был путь, поэтому по умолчанию был указан / opt / ..., но мне нужно было указать его на / usr / local / mysql / ...
tchaymore
8
Мне тоже пришлось бежать:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Дэвид Андерхилл
1
Я тоже работаю на Lion, и у меня были огромные проблемы с его работой. Я наконец нашел этот замечательный вопрос и ответ и последовал ему на 100%. Это не работает для меня , пока я не добавил, точно так , как было отмечено выше David Андерхилл: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib. Как только я запустил это, он импортировал, как и ожидалось ... наконец. Уууууу. Просто к сведению тех, кто находится в аналогичном положении.
Иоанн Король
2
Оказывается, у меня были библиотеки mysql, но только неправильно. Mac OS ElCapitan не позволяет делать ссылки на / usr / lib. Мне этого было достаточно: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Maruthi
101

Быстрый и простой способ для Mac OS X 10.8 (Mountain Lion), 10.9 (Mavericks), 10.10 (Yosemite) и 10.11 (El Capitan):

Я предполагаю, что у вас установлены XCode, его инструменты командной строки , Python и MySQL.

  1. Установите PIP:

    sudo easy_install pip
  2. Редактировать ~ / .profile: (может не понадобиться в Mac OS X 10.10)

    nano ~/.profile

    Скопируйте и вставьте следующие две строки

    export PATH=/usr/local/mysql/bin:$PATH
    export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

    Сохранить и выйти. Послесловие выполните следующую команду:

    source  ~/.profile
  3. Установить MySQLdb

    sudo pip install MySQL-python

    Чтобы проверить, все ли работает нормально, просто попробуйте

    python -c "import MySQLdb"

Для меня это сработало как обаяние. Я надеюсь, что это помогает.

Если вы столкнулись с ошибкой, связанной с отсутствующей библиотекой: Библиотека не загружена: libmysqlclient.18.dylib, вам необходимо создать символическую ссылку на нее /usr/libтак:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 
Ф Лекщас
источник
2
Спасибо, это решение работает и на Mac OSX 10.9 :-)
matsoftware
2
Это отлично сработало для меня (общедоступная бета-версия Yosemite; Mysql 5; Py2.7), но мне нужно было выполнить sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylibкоманду снизу.
Майкл Скотт Катберт
Хороший ответ. У меня уже были другие определения DYLD_LIBRARY_PATH в моем .bash_profile, поэтому я добавил их таким образомexport DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/
beroe
1
Только что проверил, что это работает с 10.10.4. Кроме того, при использовании mysql из homebrew изменение .profile не требовалось для выполнения этой работы.
Isotopp 09
1
После установки MySQL с brew install mysqlпомощью второго шага мне не пришлось проходить.
dav.garcia
36

Установите mysql и python через Macports. Носильщики сделали всю сложную работу.

sudo port install py26-mysql 
sudo port install mysql5-server

следует установить то, что вам нужно. (см. Переполнение стека для комментариев относительно сервера mysql )

Если вам нужно только подключиться к mysql, а не запускать сервер, тогда первой строки будет достаточно.

Macports теперь (начало 2013 г.) будет предоставлять бинарные загрузки для распространенных комбинаций ОС и исполняемой архитектуры, для других (и по вашему запросу) он будет компилироваться из исходного кода.

Обычно macports (или fink) помогает, когда необходимо установить сложные библиотеки и т. Д.

Только код Python, и если простые зависимости C могут быть установлены с помощью setuptools и т. Д., Но он начинает усложняться, если вы смешиваете два.

мммммм
источник
3
Обратите внимание, что перед началом использования MacPorts убедитесь, что ваш путь предпочитает / opt / local / bin над / usr / bin, поскольку MacPorts устанавливает вещи в / opt / local.
Teemu Kurppa
4
Да! И пропустите вторую строку, если вам просто нужно подключиться к существующему серверу MySQL. К сожалению, с учетом количества задействованных зависимостей попытка использовать python с mysql в OS X - это тот случай, когда MacPorts легче установить дополнительный экземпляр python, чем пытаться играть в диспетчер пакетов самостоятельно.
Нед Дейли,
В качестве примечания: если вы получаете предупреждение об устаревании, исправление есть на следующей странице: bugs.launchpad.net/python-mysqldb/+bug/341943
Джей Тейлор,
4
К вашему сведению, если вы просто выполните первую строку (по крайней мере, с py27-mysql), она все равно установит mysql5. Скачав и скомпилировав исходник. Наверное, не то, что вы хотите. Grr.
Бен Харди
@BenHardy - все устанавливается, это то, что вы хотите, и именно то, что я имел в виду - также теперь исполняемые файлы lion и Snow Leopard централизованно создаются macports, поэтому в большинстве случаев локальная компиляция не выполняется.
мммммм 05
15

Установить пип:

sudo easy_install pip

Установите варево:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Установите mysql:

brew install mysql

Установить MySQLdb

sudo pip install MySQL-python

Если у вас есть проблемы с компиляцией, попробуйте отредактировать файл ~ / .profile, как в одном из ответов здесь.

Рон Рейтер
источник
Спасибо! Это работало на Sierra [OSX 10.12.6 (16G29)].
Haranadh
curl: (22) Запрошенный URL-адрес вернул ошибку: 404 Not Found
Thirupathi Thangavel
сделал это, но pip install mysqlclientвместо этого. Работает!
jeremysprofile 02
13

Вот еще один шаг, который мне пришлось пройти после получения ошибки при завершении шага 9:

ImportError: dlopen(/Users/rick/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib

    sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Ссылка: Спасибо! http://ageekstory.blogspot.com/2011_04_01_archive.html

Ричард Бордман
источник
4

Просто была эта проблема (снова!) После получения новой коробки Lion.

Лучшее решение, которое я нашел (все еще не оптимальное на 100%, но работающее):

вы можете получить его, загрузив XCode / Dev Tools от Apple - это большая загрузка -

... но вместо этого я рекомендую этот github, в котором есть то, что вам нужно (и не имеет XCode): https://github.com/kennethreitz/osx-gcc-installer

Я загрузил их готовую PKG для льва, https://github.com/downloads/kennethreitz/osx-gcc-installer/GCC-10.7-v2.pkg

  • убедитесь, что вы скачали 64-битную версию MYSQL Community. (Установка DMG - простой путь) http://dev.mysql.com/downloads/mysql/

  • Задайте пути следующим образом:

    экспорт PATH = $ PATH: / usr / local / mysql-XXXX

    экспорт DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

    экспорт ARCHFLAGS = '- арка x86_64'

ОБРАТИТЕ ВНИМАНИЕ, ЧТО:

1 в mysql-XXXX выше, XXX - это конкретная версия, которую вы загрузили. (Вероятно, / usr / local / mysql / также будет работать, поскольку это, скорее всего, псевдоним того же самого, но я не буду делать вид, что знаю вашу настройку)

2 Я видел, как предлагалось установить для ARCHFLAGS значение «-arch i386 -arch x86_64», но указание только x86_64 показалось мне лучше. (Я могу придумать несколько причин для этого, но они не являются строго актуальными).

  • Установите зверя!

    easy_install MySQL-python

  • ПОСЛЕДНИЙ ШАГ:

Навсегда добавить DYLD_LIBRARY_PATH!

Вы можете добавить его в свой bash_profile или аналогичный. Для меня это был пропущенный шаг, без которого моя система продолжала настаивать на различных ошибках при поиске _mysql.so и так далее.

экспорт DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

@ richard-boardman, только что заметил ваше решение soft link, которое, по сути, может делать то же самое, что и мое решение PATH ... ребята, все, что лучше всего подходит для вас.

Лучшая ссылка: http://activeintelligence.org/blog/archive/mysql-python-aka-mysqldb-on-osx-lion/

jsh
источник
4

Вы можете попробовать использовать чистый питон pymysql:

sudo easy_install pymysql

(Или используйте, pipесли он у вас установлен.) Затем добавьте это перед собой import MySQLdbв свой код:

try:
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass
Коллин Андерсон
источник
3

Или просто попробуйте:

> sudo easy_install MySQL-python

Если это дает ошибку, как показано ниже:

EnvironmentError: mysql_config не найден

, затем просто запустите это

> export PATH=$PATH:/usr/local/mysql/bin
Шашанк Агарвал
источник
0

Если вы используете 64-битный MySQL, использование ARCHFLAGS для указания архитектуры вашего процессора при создании библиотек mysql-python поможет:

ARCHFLAGS='-arch x86_64' python setup.py build
ARCHFLAGS='-arch x86_64' python setup.py install
Шан Валлеру
источник
0
export PATH=$PATH:/usr/local/mysql/bin/

должен решить проблему для вас, так как система не может найти файл mysql_config.

Варун Бхатия
источник
0

На macos Sierra это работает для меня, где python управляется анакондой:

anaconda search -t conda mysql-python

anaconda show CEFCA/mysql-python

conda install --channel https://conda.anaconda.org/CEFCA mysql-python

Для использования с SQLAlchemy:

Python 2.7.13 | Continuum Analytics, Inc. | (по умолчанию, 20 декабря 2016 г., 23:05:08) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] на darwin Введите «help», «copyright», «credits» или «license», чтобы узнать больше Информация. Анаконда представлена ​​вам компанией Continuum Analytics. Пожалуйста, проверьте: http://continuum.io/thanks и https://anaconda.org

>>> из импорта sqlalchemy *

>>> dbengine = create_engine ('mysql: // ....')

сагинага
источник
0

Этот ответ представляет собой обновление, выпущенное примерно в ноябре 2019 года. Ни одна из популярных программных пакетов не предоставит вам работоспособную установку на MacOS 10.13 (и, вероятно, в других версиях). Вот простой способ заставить все работать:

brew install mysql
pip install mysqlclient

Если вам нужна помощь с установкой brew, посетите этот сайт: https://brew.sh/

ест
источник
0

Я столкнулся с этой проблемой и обнаружил, что mysqlclientнужно знать, где найти openssl, а OSX скрывает это по умолчанию.

Найдите openssl с помощью brew info openssl, а затем добавьте путь к вашей opensslкорзине в свой PATH:

export PATH="/usr/local/opt/openssl/bin:$PATH"

Я рекомендую добавить это в ваш .zshrc или .bashrc, чтобы вам не нужно было беспокоиться об этом в будущем. Затем, после экспорта этой переменной (что может привести к закрытию и повторному открытию сеанса bash), добавьте еще две переменные env:

# in terminal
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"

Затем, наконец, запустите:

pipenv install mysqlclient

и он должен установиться нормально.

Источник: https://medium.com/@shandou/pipenv-install-mysqlclient-on-macosx-7c253b0112f2

Эллиот Плант
источник