Как установить MySQLdb (библиотека доступа к данным Python для MySQL) в Mac OS X?
Я новичок в Python, но я только что потратил день на то, как заставить MySQLdb работать исправно, а юниверс в соответствии с google содержит многочисленные ссылки на то, что PITA это, и чрезмерное количество руководств, которые кажутся устаревшими. Учитывая, что этот сайт предназначен для решения этих проблем, и я знаю, что мне понадобится ссылка на решение в будущем, я собираюсь задать вопрос, предоставить свой ответ и посмотреть, что еще плавает на поверхность.
Итак, вопрос в том, как получить MySQLdb, работающий на Mac OS X?
Ответы
Ответ 1
Вот рассказ о моем бессвязном опыте с этой проблемой. Хотелось бы увидеть, что он отредактирован или обобщен, если у вас есть лучший опыт в этой проблеме... примените немного этой магии SO.
Примечание. Комментарии в следующем абзаце применимы к Snow Leopard, но не для Lion, который, как представляется, требует 64-битного MySQL
Во-первых, автор (еще?) MySQLdb говорит здесь, что одна из самых пагубных проблем заключается в том, что OS X устанавливается с 32-битная версия Python, но большинство средних joes (включая меня), вероятно, переходят на установку 64-битной версии MySQL. Плохой ход... удалите 64-битную версию, если вы ее установили (инструкции по этой нерешительной задаче доступны на SO здесь), затем загрузите и установите 32-разрядную версию (пакет здесь)
Существует множество поэтапных шагов по созданию и установке библиотек MySQLdb. У них часто есть тонкие различия. Это показалось мне самым популярным и обеспечило рабочее решение. Я воспроизвел его с помощью нескольких изменений ниже
Шаг 0:
Прежде чем начать, я предполагаю, что у вас есть MySQL, Python и GCC, установленный на mac.
Шаг 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:
Удалите яйцо под пользователем /$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 ..
выйти из каталога сборки, и ошибка должна исчезнуть.
Как я писал наверху, я хотел бы, чтобы этот ответ был обобщен, так как существует множество других конкретных событий этой ужасной проблемы. Отредактируйте или предоставите свой собственный, лучший ответ.
Ответ 2
Быстрый и простой способ для 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/
Сохранить и выйти. Послесловия выполните следующую команду:
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
Ответ 3
Установите mysql и python через Macports Портаторы выполнили всю сложную работу.
sudo port install py26-mysql
sudo port install mysql5-server
должен установить то, что вам нужно. (см. Переполнение стека для комментариев re mysql server)
Если вам нужно только подключиться к mysql и не запускать сервер, то первой строки будет достаточно.
В настоящее время Macports (начало 2013 года) будет обеспечивать двоичные загрузки для общих комбинаций ОС как исполняемой архитектуры, для других (и если вы ее запросите), она будет построена из источника.
В общем случае поддержка macports (или fink) при наличии сложных библиотек и т.д., которые необходимо установить.
Только код Python, и если простые зависимости C могут быть установлены с помощью setuptools и т.д., но он начинает становиться сложным, если вы смешиваете два.
Ответ 4
Установить pip:
sudo easy_install pip
Установите brew:
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
Установите mysql:
brew install mysql
Установить MySQLdb
sudo pip install MySQL-python
Если у вас есть проблемы с компиляцией, попробуйте отредактировать файл ~/.profile, как в одном из ответов здесь.
Ответ 5
Вот еще один шаг, который мне пришлось пройти, после получения ошибки при выполнении шага 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
Ответ 6
Как указано в Установка MySQL-python на Mac:
pip uninstall MySQL-python
brew install mysql
pip install MySQL-python
Затем проверьте его:
python -c "import MySQLdb"
Ответ 7
У вас была эта проблема (снова!) после получения нового Lion box.
Лучшее решение, которое я нашел (все еще не 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. (Установка DMG - легкий путь) http://dev.mysql.com/downloads/mysql/
-
Задайте пути следующим образом:
export 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/также будет работать, поскольку это, скорее всего, псевдоним, но я не буду притворяться, что знаю вашу настройку)
2 Я видел, что он предположил, что ARCHFLAGS установлен в '-arch i386 -arch x86_64', но указание только x86_64 показалось мне лучше для меня. (Я могу придумать некоторые причины для этого, но они не являются строго релевантными).
Постоянно добавьте 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/
Ответ 8
Или простую попытку:
sudo easy_install MySQL-python
Если это дает ошибку
EnvironmentError: mysql_config не найден
Просто запустите этот
export PATH = $PATH:/usr/local/mysql/bin
Ответ 9
Вы можете попробовать использовать pure-python pymysql
:
sudo easy_install pymysql
(Или используйте pip
, если вы его установили.) Затем добавьте это до import MySQLdb
в свой код:
try:
import pymysql
pymysql.install_as_MySQLdb()
except ImportError:
pass
Ответ 10
Если вы используете 64-битную MySQL, используя ARCHFLAGS, чтобы указать вашу архитектуру процессора при построении библиотек mysql-python, выполните трюк:
ARCHFLAGS='-arch x86_64' python setup.py build
ARCHFLAGS='-arch x86_64' python setup.py install
Ответ 11
export PATH=$PATH:/usr/local/mysql/bin/
должен исправить эту проблему, поскольку система не может найти файл mysql_config.
Ответ 12
На 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 Введите "помощь", "авторское право", "кредиты" или "лицензия" для получения дополнительной информации. Anaconda предоставлен вам компанией Continuum Analytics. Пожалуйста, проверьте: http://continuum.io/thanks и https://anaconda.org
→ > из импорта sqlalchemy *
→ > dbengine = create_engine ('mysql://....')