Как установить MySQLdb (библиотека доступа к данным Python для MySQL) в Mac OS X?
Я новичок в Python, но я только что потратил день на то, чтобы понять, как заставить MySQLdb работать должным образом, и вселенная, согласно Google, включает в себя многочисленные ссылки на то, что это за PITA, и чрезмерное количество руководств, которые кажутся устарели. Учитывая, что этот сайт предназначен для решения подобных проблем, и я знаю, что в будущем мне понадобится ссылка на решение, я собираюсь задать вопрос, предоставить свой ответ и посмотреть, что еще всплывает в поверхность.
Итак, вопрос в том, как заставить MySQLdb работать на Mac OS X?
12 ответов
Обновление для тех, кто использует 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-eggs
Шаг 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 ..
вне каталога сборки, и ошибка должна исчезнуть.
Как я уже писал вверху, мне бы хотелось, чтобы этот ответ был обобщенным, поскольку существует множество других конкретных примеров этой ужасной проблемы. Отредактируйте или предоставьте свой лучший ответ.
Быстрый и простой способ для Mac OS X 10.8 (Mountain Lion), 10.9 (Mavericks), 10.10 (Yosemite) и 10.11 (El Capitan):
Я предполагаю, что у вас есть XCode, его инструменты командной строки, Python и MySQL.
Установите PIP:
sudo easy_install pip
Отредактируйте ~ /.profile: (Может не быть необходимым в Mac OS X 10.10)
nano ~/.profile
Скопируйте и вставьте следующие две строки
export PATH=/usr/local/mysql/bin:$PATH export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
Сохранить и выйти. Afterwords выполняет следующую команду:
source ~/.profile
Установите 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
Установите mysql и python через Macports. Портеры проделали всю сложную работу.
sudo port install py26-mysql
sudo port install mysql5-server
следует установить то, что вам нужно. (см. Переполнение стека для комментариев к серверу MySQL)
Если вам нужно только подключиться к mysql и не запускать сервер, тогда достаточно первой строки.
Macports сейчас (в начале 2013 года) обеспечит бинарные загрузки для распространенных комбинаций ОС с исполняемой архитектурой, для других (и по вашему желанию) она будет собираться из исходного кода.
В общем, macports (или fink) помогают, когда есть сложные библиотеки и т.д., которые необходимо установить.
Код только на Python, и если простые настройки C могут быть установлены с помощью setuptools и т. Д., Но он становится сложным, если вы смешаете их.
Установить пункт:
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, как в одном из ответов здесь.
Вот еще один шаг, который мне пришлось пройти, после получения ошибки при завершении шага 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
Как указано на Установка MySQL-Python на Mac:
pip uninstall MySQL-python
brew install mysql
pip install MySQL-python
Тогда проверьте это:
python -c "import MySQLdb"
Вы можете попробовать использовать чистый питон pymysql
:
sudo easy_install pymysql
(Или использовать pip
если он у вас установлен.) Затем добавьте это перед вами import MySQLdb
в вашем коде:
try:
import pymysql
pymysql.install_as_MySQLdb()
except ImportError:
pass
Просто возникла эта проблема (снова!) После получения новой коробки Lion.
Лучшее решение, которое я нашел (все еще не на 100% оптимально, но работает):
убедитесь, что у вас есть 64-битный питон. Как проверить, является ли библиотека 32-битной /64-битной, построенной на Mac OS X?
установите easy_install, если у вас его нет. http://packages.python.org/distribute/easy_install.html
установите GCC, если у вас его нет.
Вы можете получить его, загрузив 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
export DYLD_LIBRARY_PATH = / usr / local / mysql / lib /
export ARCHFLAGS = '- arch x86_64'
ОБРАТИТЕ ВНИМАНИЕ, ЧТО:
1 в mysql-XXXX выше, XXX - это конкретная версия, которую вы скачали. (Вероятно, / usr / local / mysql / также будет работать, так как это скорее всего псевдоним, но я не буду притворяться, что знаю ваши настройки)
Я видел, что он предложил установить ARCHFLAGS в '-arch i386 -arch x86_64', но указание только x86_64 мне показалось лучше. (Я могу подумать о некоторых причинах этого, но они не являются строго релевантными).
Установите зверя!
easy_install MySQL-python
ПОСЛЕДНИЙ ШАГ:
Добавьте DYLD_LIBRARY_PATH навсегда!
Вы можете добавить его в свой bash_profile или аналогичный. Это был пропущенный для меня шаг, без которого моя система продолжала настаивать на различных ошибках при поиске _mysql.so и так далее.
export DYLD_LIBRARY_PATH = / usr / local / mysql / lib /
@ richard-boardman, только что заметил ваше решение для мягких ссылок, которое, по сути, может делать то же самое, что и мое решение PATH... ребята, все, что работает лучше для вас.
Лучшая ссылка: http://activeintelligence.org/blog/archive/mysql-python-aka-mysqldb-on-osx-lion/
Или просто попробуйте:
> sudo easy_install MySQL-python
Если выдает ошибку, как показано ниже:
EnvironmentError: mysql_config не найден
затем просто запустите
> export PATH=$PATH:/usr/local/mysql/bin
Этот ответ представляет собой обновление, выпущенное примерно в ноябре 2019 года. Ни одна из популярных программных пакетов не предоставит вам рабочую установку на MacOS 10.13 (и, вероятно, в других версиях). Вот простой способ заставить все работать:
brew install mysql
pip install mysqlclient
Если вам нужна помощь с установкой brew, посетите этот сайт: https://brew.sh/
Я столкнулся с этой проблемой и обнаружил, что mysqlclient
нужно знать, где найти openssl, а OSX скрывает это по умолчанию.
Найдите openssl с помощью brew info openssl
, а затем добавьте путь к вашему openssl
bin в ваш 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
export PATH=$PATH:/usr/local/mysql/bin/
должен решить проблему для вас, так как система не может найти файл mysql_config.
Если вы используете 64-битную версию MySQL, используйте ARCHFLAGS для указания архитектуры вашего процессора при сборке библиотек mysql-python:
ARCHFLAGS='-arch x86_64' python setup.py build
ARCHFLAGS='-arch x86_64' python setup.py install
На MacOS Sierra это работает для меня, где Python управляется Anaconda:
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 Apple LLVM 6.0 (clang-600.0.57)] для darwin Введите "help", "copyright", "credits" или "license", чтобы узнать больше Информация. Анаконда представлена вам аналитикой Continuum. Пожалуйста, проверьте: http://continuum.io/thanks и https://anaconda.org/
>>> из sqlalchemy import *
>>> dbengine = create_engine ('mysql: //....')