Як встановити MySQLdb (бібліотеку доступу даних Python до MySQL) на Mac OS X?


99

Я новачок в Python, але я просто провів день, працюючи над тим, щоб MySQLdb працював належним чином, а всесвіт, згідно з google, містить численні посилання на те, що це таке PITA, і неповноцінне число посібників, які, здається, є застаріла. Зважаючи на те, що цей сайт призначений для вирішення подібних проблем, і я знаю, що в майбутньому мені знадобиться посилання на рішення, я буду задавати питання, надати свою відповідь і побачити, що ще плаває на поверхня.

Отже, питання полягає в тому, як змусити MySQLdb працювати на Mac OS X?

Відповіді:


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-яйця

Крок 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-пакети / MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg / _mysql.pyc, але в sys.path додається XXXX / MySQL-python-1.2.3c1

Google це досить просто, але, щоб врятувати вас від проблеми, ви опинитесь тут (а може, і не ... не особливо надійною URL-адресою) і зрозумієте, що вам потрібно cd ..вийти з каталогу збирання, і помилка повинна зникнути.

Як я писав вгорі, я хотів би бачити цю відповідь узагальненою, оскільки там є численні інші конкретні переживання цієї жахливої ​​проблеми. Відредагуйте або надайте свою, кращу відповідь.


1
Зауважте, що Apple, що постачається Python на 10.6 (Snow Leopard), вважає за краще працювати 64-бітною (це 32-бітний / 64-бітний універсальний). Є й інші підводні камені. Деякий час у серії mysql 5.1.x тарболи ОС 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
Я також бігаю на Лева, і у мене виникли великі проблеми з тим, щоб це налагодити роботу. Нарешті я знайшов це чудове запитання та відповідь і дотримувався його 100%. Це не працює для мене , поки я не додав, точно так , як було зазначено вище David Андерхилл: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib. Як тільки я це запустив, він імпортував, як очікувалося ... нарешті. Віл. Просто фій для тих, хто в подібному положенні.
Іван Король

2
Виявляється, у мене були бібліотеки mysql, але тільки не пов’язані належним чином. Mac OS ElCapitan не дозволяє підключатись до / usr / lib. Так що це було досить для мене: Судо пров -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 public beta; 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 від домашньої мови, зміна .profile не потрібна, щоб зробити цю роботу.
Isotopp

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 року) забезпечить двійкові завантаження для загальних комбінацій ОС виконуваної архітектури, для інших (і якщо ви цього вимагаєте) вона буде створена з джерела.

Загалом, макпорти (або фінки) допомагають, коли є складні бібліотеки тощо, які потрібно встановити.

Код тільки для Python, і якщо прості залежності C можна встановити через setuptools і т. Д., Але він починає бути складним, якщо змішати ці два.


3
Зауважте, що, починаючи використовувати MacPorts, переконайтеся, що ваш шлях віддає перевагу / opt / local / bin over / usr / bin, оскільки MacPorts встановлює речі під / opt / local.
Теему Курппа,

4
Так! І пропустіть другий рядок, якщо вам просто потрібно підключитися до існуючого сервера MySQL. На жаль, із кількістю залучених залежностей спроба використовувати python з mysql на OS X - це один випадок, коли простіше дозволити MacPorts встановити додатковий екземпляр python, а не намагатися грати менеджер пакунків самостійно.
Нед Дейлі,


4
FYI, якщо ви просто зробите перший рядок (принаймні, з py27-mysql), він все одно встановить mysql5. Завантажуючи та компілюючи джерело. Напевно, не те, що ти хочеш. Grr
Бен Харді

@BenHardy - він отримує все встановлене, що саме ви хочете, і саме те, що я мав на увазі - також тепер виконуються файли з левами та Snow Leopard в центрі міста, створені макпортами, тому в більшості випадків локальний компілятор не буде робити.
ммммммм

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)].
Харанад

curl: (22) Запитана URL-адреса повернула помилку: 404 Не знайдено
Thirupathi Thangavel

зробив це, але pip install mysqlclientзамість цього. Працює!
jeremysprofile

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

Просто отримала цю проблему (знову ж таки!) Після отримання нової коробки Лева.

Я знайшов найкраще рішення (все ще не на 100% оптимальне, але працює):

ви можете отримати це, завантаживши інструменти XCode / Dev з 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/

  • Встановіть контури таким чином:

    експортувати 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 /

@ Річард-бордер, щойно помітив ваше м'яке рішення, яке, по суті, може робити те саме, що робить і моє рішення PATH ... люди, що краще для вас працює.

Найкраща довідка: http://activeintelligence.org/blog/archive/mysql-python-aka-mysqldb-on-osx-lion/


4

Ви можете спробувати використовувати pure-python 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 це робота для мене, де пітоном керує анаконда:

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 Введіть "довідка", "авторські права", "кредити" або "ліцензія" для отримання додаткових відомостей інформація. Анаконда приносить вам компанія Continuum Analytics. Перевірте: http://continuum.io/thanks та https://anaconda.org

>>> від імпорту sqlalchemy *

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


0

Ця відповідь є оновленням, приблизно в листопаді 2019 року. Жодна з популярних установок pip не надасть вам робочої установки на MacOS 10.13 (а також, ймовірно, і інших версіях). Ось простий спосіб, за яким я працював:

brew install mysql
pip install mysqlclient

Якщо вам потрібна допомога з встановленням заварки, перегляньте цей сайт: 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.