2014-11-22 28 views
4

Я не могу для жизни меня изобразить этот. Я весь день ищу в Интернете, и все ресурсы кажутся ужасно устаревшими. Из того, что я могу сказать, заставить MySQLdb и Python играть хорошо вместе, довольно сложно. Я догадался об этом, и я не уверен, как двигаться дальше.MySQLdb и Python ImportError

Во-первых, я бегу на Python 2.7

Я получаю ошибку, когда я пытаюсь запустить «импорт MySQLdb» в прямом эфире переводчика заключается в следующем:

ImportError: this is MySQLdb version (1, 2, 2, 'final', 0), but _mysql is version (1, 2, 5, 'final', 1) 

Я также вижу следующие журналы ошибок когда я запускаю «pip install mysql-python», однако я не уверен, что thats jsut связано с неправильной совпадением версии. http://pastebin.com/hqVv6aPZ

У меня есть проект python, который имеет зависимость от MySQLdb, и я пытаюсь получить virtualenv, из которого я запускаю Python, чтобы правильно установить пакет. Это то, что я сделал:

  • Я построил MySQL из источника, чтобы убедиться, что у меня есть 64-битная совместимая версия MySQL на моей машине. Для этого я использовал флаг -universal.
  • Я также подтвердил, что я запускаю 64-битную версию Python.
  • MySQL пришел из Homebrew
  • MySQL-питона пришел из пип

Я не могу за жизнь мне понять, что делать здесь. Кажется, что есть только некорректная версия версии MySQLdb и _mysql на моей машине. Это так? Если это решение просто переустанавливает старую версию MySQL? Похоже, что когда я принуждаю pip к установке версии 1.2.5 mysql-python, он устанавливает версию 1.2.2 MySQLdb, поэтому я теряюсь относительно того, что делать здесь, потому что я не уверен, какой пакет из homebrew фактически коррелирует с версия 1.2.5 для _mysql.

EDIT -

sys.path

'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python27.zip', 
'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python2.7', 
'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python2.7/plat-darwin', 
'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python2.7/plat-mac', 
'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python2.7/plat-mac/lib-scriptpackages', '/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/Extras/lib/python', 
'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python2.7/lib-tk', 
'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python2.7/lib-old', 
'/Users/XXXXXXXXXXX/virtualenvs/qa-automated-tests/lib/python2.7/lib-dynload', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', 
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', 
'/Users/adam.stark/virtualenvs/qa-automated-tests/lib/python2.7/site-packages' 

Python --version говорит, что я нахожусь на версии 2.7.5. Я также установил пастебин для публики. Я просто не уверен, что именно уместна информация в этом дампе, он отплевывает 16 ошибок.

+1

В любом случае, вы используете предустановленный Python от Apple? Домашний питон? Другой Python, как двоичный установщик python.org? Что делают 'какие python' и' which pip' из оболочки? Как насчет 'import sys; print sys.executable, sys.path' внутри Python? – abarnert

+1

Кроме того, '_mysql' не является частью MySQL, это часть MySQLdb. Как-то у вас есть часть MySQLdb 1.2.2.0 и часть 1.2.5.1. Я предполагаю, что либо (а) у вас есть 1.2.2.0 в ваших системных сайтах-пакетах, а затем вы установили 1.2.5.1 в свою виртуальную среду, но только частично ее установили, или (б) у вас как-то получилось два разные установки Python 2.7, разделяющие часть своих пакетов-сайтов, а первый «пип» и первый «питон» на вашем PATH - это разные установки Python. – abarnert

+0

Я обновил свой вопрос, чтобы отразить информацию, которую вы просили. sys.executable указывает на мой virtualenv, а sys.path был создан из PyDev, поэтому большинство содержащихся в нем ссылок также указываются на virtualenv, несколько указывают на System/Library/Frameworks/Python.framework/Versions/2.7. Я также включил местоположение сайтов в sys.path. – Xenology

ответ

3

Проблема здесь оказалась в нескольких вещах. Как заметил Абарнер в комментариях к вопросу, произошло смешение системного питона и виртуального питона. Чтобы решить эту проблему, мне пришлось изменить свойства проекта проекта PyDev, чтобы указать только на виртуальный экземпляр python, а затем в настройках интерпретатора PyDev мне пришлось перестроить PYTHONPATH.

После этого было сделано, в virtualenv я должен был выполнить следующий код:

pip uninstall mysql-python 
pip install mysql-python==1.2.5 

Это разрешенное все вопросы.

+0

Как вы перестроили путь python? –

+1

Что делать, если я хочу использовать новый mysql-python? 'but _mysql - это версия (1, 2, 5, 'final', 1)', что такое соответствующий пакет для '_mysql'? Возможно ли обновить/обновить это '_mysql'? –

1

Вы можете попробовать это. Открытый терминал и тип:

sudo apt-get remove python-mysqldb 
sudo apt-get install python-dev libmysqlclient-dev 
git clone https://github.com/farcepest/MySQLdb1.git 
python setup.py build 
sudo python setup.py install 

Это сработало для меня.Я использую Python 2

0

У меня была та же проблема, произведенная по другой причине. У меня нет прав root на моей рабочей машине (часть университетской инфраструктуры). Мне пришлось установить MySQLdb локально, выпустив pip install --user MySQL-python (из этого guide). Это привело к такому же несоответствию ImportError: this is MySQLdb version (1, 2, 3, 'final', 0), but _mysql is version (1, 2, 5, 'final', 1). Установка версии 1.2.5 не работала.

Что я сделал: удаление из местного и повторно установить версию 1.2.3, как указано ошибка исчезла

pip install --user MySQL-python==1.2.3

Ошибка.

+0

Вышеописанное было протестировано на Python 2.7 –

Смежные вопросы