Установка MySQLdb под Snow Leopard

После того, как я поменял в своём ноутбуке жёсткий диск на SSD, я решил переставить систему с нуля. Сделал я это хотя бы потому, что старый диск был почти в два раза больше, чем новый, да и просто для того, чтобы избавиться от «истрического наследия».

После установки системы и переноса всех необходимых файлов я занялся установкой всего того, что простым копированием перенести нельзя. Например, я установил свежую версию интерпретатора Python 2.7 и новый Xcode 4.

Затем мне понадобилась база данных MySQL и связка (MySQLdb) для Python с ней. Опишу установку всей этой кухни, тут есть неочевидные моменты:

  • Скачивать и устанавливать нужно только 64-х битную версию MySQL.
  • Устанавливать MySQLdb с помощью easy_install или чего-то подобного смысле не имеет, т.к. будет вываливаться такая ошибка:
    Traceback (most recent call last):
      File "", line 1, in 
      File "build/bdist.macosx-10.6-intel/egg/MySQLdb/__init__.py", line 19, in 
      File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 7, in 
      File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 6, in __bootstrap__
    ImportError: dlopen(/Users/bm/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so, 2): no suitable image found.  Did find:
        /Users/bm/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so: mach-o, but wrong architecture
  • Нужно скачать последнюю версию mysqldb
  • Дальше немного терминальной магии:

    tar xzf MySQL-python-1.2.3c1.tar.gz
    cd MySQL-python-1.2.3c1
    ARCHFLAGS='-arch x86_64' python setup.py build
    ARCHFLAGS='-arch x86_64' python setup.py install
    

После этого всё работает правильно.

Установка GoogleCL

Не так давно Google опубликовал весьма интересную программу — GoogleCL. Это программка для коммандной строки, которая позволяет работать с сервисами гугла. Зайдите по ссылке, там есть несколько вкусных примеров, а в документации — примеры скриптов с использованием GoogleCL.

Установить эту программу можно несколькими способами:

  • Macports.

Вероятно, другие подобные системы тоже добавили в свои репозитории требуемую программу. Для того, чтобы установить GoogleCL из MacPorts, вам нужно выполнить следующие команды:

sudo port selfupdate
sudo port install googlecl

Этот способ требует, чтобы у вас был установлен MacPorts.

  • «Ручками».

Опять две команды в терминале:

sudo easy_install googlecl
sudo easy_install gdata

И всё работает!

Snow Leopard и MySQLdb

После обвновления до Снежного Барса у меня перестал работать питоновский модуль для доступа с MySQL MySQLdb. Также куда-то пропала сама MySQL. Оказалось, что скомпилировать модуль под снежным барсом просто так не получается. Привожу короткую инструкцию.

  1. Скачайте и установите MySQL
  2. Скачайте последнюю версию MySQLdb.
  3. Установите Xcode с диска Snow Leopard. При установке поставьте галочку для добавления совместимости с 10.4
  4. Далее немного терминальной магии:
    tar zxvf MySQL-python-1.2.3c1.tar.gz
    cd MySQL-python-1.2.3c1
    export CC="gcc-4.0"
    export CXX="g++-4.0"
    python setup.py build
    sudo python setup.py install
    

Вся хитрость тут в двух строчках, начинающихся со слова export. Без них ничего не работает.

Проверить работоспособность можно так:

python
Python 2.6.2 (r262:71600, Apr 16 2009, 09:17:39) 
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>>

Если не появилось никаких ошибок, значит у вас всё получилось.

Уникальный словарь для MacOS X — TranslateIt!

Snow Leopard, Textmate и запуск скриптов

Ещё одна маленькая заметка про Textmate. Я пишу в нём небольшие скрипты на python и люблю проверять их работоспособность запуская прямо из редактора (шорткат ⌘R). В снежном барсе попытка сделать так выдавала стабильную ошибку и создавала отчет о крушении каких-то внутренних процессов Textmate.

Решить проблему можно удалив (или переименовав) файл /Applications/TextMate.app/Contents/SharedSupport/Support/lib/tm_interactive_input.dylib.

В терминале:

rm /Applications/TextMate.app/Contents/SharedSupport/Support/lib/tm_interactive_input.dylib

Обсуждение проблемы.