Я пытался несколько недель и недель безуспешно устанавливать MySQL-python на Mac OS X 10.6 с Python 7.0 из дистрибутива Enthought Python. Многие из проблем, с которыми я столкнулся, были описаны в других постах, и я почти уверен, что прочитал все из них, но все еще не могу решить эту проблему. Я попытался установить и переустановить различные пакеты MySQL для 64-битной OS X, но, наконец, просто скомпилировал его с нуля. MySQL, насколько я знаю, работает и живет в каталоге /usr/local/mysql-5.5.9-osx10.6-x86/.
Я смог установить MySQL-python-1.2.3 с помощью "sudo setup.py install". Однако, когда я импортирую его, я получаю сообщение об ошибке:
$ python
Enthought Python Distribution -- www.enthought.com
Version: 7.0-2 (64-bit)
Python 2.7.1 |EPD 7.0-2 (64-bit)| (r271:86832, Dec 3 2010, 15:56:20)
[GCC 4.0.1 (Apple Inc. build 5488)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "build/bdist.macosx-10.5-x86_64/egg/MySQLdb/__init__.py", line 19, in <module>
File "build/bdist.macosx-10.5-x86_64/egg/_mysql.py", line 7, in <module>
File "build/bdist.macosx-10.5-x86_64/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/foo/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.5-x86_64.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Users/foo/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.5-x86_64.egg-tmp/_mysql.so
Reason: image not found
Я посмотрел, чтобы увидеть, как другие авторы здесь предлагают, что _mysql.so ссылается с помощью otool:
$ otool -L /Users/foo/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.5-x86_64.egg-tmp/_mysql.so
/Users/foo/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.5-x86_64.egg-tmp/_mysql.so:
libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 438.0.0)
Правильный файл, кажется, существует здесь:
$ ls -al /usr/local/mysql-5.5.9-osx10.6-x86/lib/libmysqlclient.16.dylib
-rwxr-xr-x 1 root wheel 3539752 Jan 20 2011 /usr/local/mysql-5.5.9-osx10.6-x86/lib/libmysqlclient.16.dylib
Я попробовал несколько подходов, чтобы _mysql.so распознал этот файл:
Создание символических ссылок, как предлагали другие, на нужный файл:
$ sudo ln -s /usr/local/mysql-5.5.9-osx10.6-x86/lib/libmysqlclient.16.dylib /usr/lib/libmysqlclient.18.dylib
когда я делаю это, я получаю новую ошибку:
>>> import MySQLdb
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "build/bdist.macosx-10.5-x86_64/egg/MySQLdb/__init__.py", line 19, in <module>
File "build/bdist.macosx-10.5-x86_64/egg/_mysql.py", line 7, in <module>
File "build/bdist.macosx-10.5-x86_64/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/foo/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.5-x86_64.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Users/foo/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.5-x86_64.egg-tmp/_mysql.so
Reason: no suitable image found. Did find:
/usr/lib/libmysqlclient.18.dylib: mach-o, but wrong architecture
Установка DYLD_LIBRARY_PATH следующим образом (после удаления предыдущей символической ссылки):
$ export DYLD_LIBRARY_PATH = $ DYLD_LIBRARY_PATH:/usr/local/mysql-5.5.9-osx10.6-x86/lib/
Тогда я получаю ту же ошибку, что и изначально:
>>> import MySQLdb
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "build/bdist.macosx-10.5-x86_64/egg/MySQLdb/__init__.py", line 19, in <module>
File "build/bdist.macosx-10.5-x86_64/egg/_mysql.py", line 7, in <module>
File "build/bdist.macosx-10.5-x86_64/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/foo/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.5-x86_64.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Users/foo/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.5-x86_64.egg-tmp/_mysql.so
Reason: image not found
Я также пытался, как Нед предложил использовать install_name_tool, чтобы изменить ссылку
из каталога ~/.python-eggs:
пытается изменить 18 на 16: $ sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.9-osx10.6-x86/libmysqlclient.16.dylib _mysql.so
подход 2: попытка изменить 18 на 18: sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.9-osx10.6-x86/lib/mysql/libmysqlclient.18.dylib _mysql.so
Когда я пробую это, я получаю ошибку:
>>> import MySQLdb
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "build/bdist.macosx-10.5-x86_64/egg/MySQLdb/__init__.py", line 19, in <module>
ImportError: dynamic module does not define init function (init_mysql)
Любые идеи о том, что можно сделать, чтобы это исправить? Я бы очень хотел, чтобы этот пакет работал ... Я пытался некоторое время и не мог заставить его работать. Я понимаю, что это общая проблема, но я не смог заставить работать ни одно из опубликованных решений.
Большое спасибо за вашу помощь.