webdevqa.jp.net

Python:MySQLdbおよび「ライブラリがロードされていません:libmysqlclient.16.dylib」

セットアップ...

クリーンなMac os X 10.6インストールをセットアップしてpython/Djangoを開発しようとしたところ、10.5でこれを実行したことを覚えていませんでした。

mysql-5.5.8-osx10.6-x86_64.dmgのインストーラーからMySQLをインストールした後、実行しました

$ Sudo pip install MySQL-python

そして、それはスムーズに行くように見えました(以下の出力)

Downloading/unpacking MySQL-python
  Downloading MySQL-python-1.2.3.tar.gz (70Kb): 70Kb downloaded
  Running setup.py Egg_info for package MySQL-python
    warning: no files found matching 'MANIFEST'
    warning: no files found matching 'ChangeLog'
    warning: no files found matching 'GPL'
Installing collected packages: MySQL-python
  Running setup.py install for MySQL-python
    building '_mysql' extension
    gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -pipe -Dversion_info=(1,2,3,'final',0) -D__version__=1.2.3 -I/usr/local/mysql/include -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c _mysql.c -o build/temp.macosx-10.6-universal-2.6/_mysql.o -Os -g -fno-common -fno-strict-aliasing -Arch x86_64
    In file included from _mysql.c:36:
    /usr/local/mysql/include/my_config.h:325:1: warning: "SIZEOF_SIZE_T" redefined
    In file included from /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/Python.h:9,
                     from pymemcompat.h:10,
                     from _mysql.c:29:
    /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/pymacconfig.h:33:1: warning: this is the location of the previous definition
    In file included from _mysql.c:36:
    /usr/local/mysql/include/my_config.h:419:1: warning: "HAVE_WCSCOLL" redefined
    In file included from /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/Python.h:8,
                     from pymemcompat.h:10,
                     from _mysql.c:29:
    /System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/pyconfig.h:803:1: warning: this is the location of the previous definition
    gcc-4.2 -Wl,-F. -bundle -undefined dynamic_lookup build/temp.macosx-10.6-universal-2.6/_mysql.o -L/usr/local/mysql/lib -lmysqlclient_r -lpthread -o build/lib.macosx-10.6-universal-2.6/_mysql.so -Arch x86_64
    warning: no files found matching 'MANIFEST'
    warning: no files found matching 'ChangeLog'
    warning: no files found matching 'GPL'
Successfully installed MySQL-python
Cleaning up...

この後、私は試しました:

$ python -c "import MySQLdb"

そして、それは私をひっくり返しました:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/Library/Python/2.6/site-packages/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/Library/Python/2.6/site-packages/_mysql.so, 2): Library not loaded: libmysqlclient.16.dylib
  Referenced from: /Library/Python/2.6/site-packages/_mysql.so
  Reason: image not found

私の質問に...

何を間違えましたか?/他に何をする必要がありますか?

これをグーグルで検索(およびここで検索)すると、Ruby not with many with Python tho。

59
rennat

_mysql.solibmysqlclient.16.dylibを指します。つまり、PythonとMySQLクライアントライブラリ_mysql.soとの間のブリッジとして機能する共有ライブラリは、MySQLクライアントライブラリの動的ライブラリを参照し、そのライブラリは何らかの理由でロードされました。

答える必要がある質問:

  • システムのどこかにlibmysqlclient.16.dylibがありますか?そうでない場合は、MySQLクライアントソフトウェアをインストールする必要があります。
  • その場合、DYLD_LIBRARY_PATH設定にそのライブラリを含むディレクトリはありますか?そうでない場合は、追加してみてください。
  • その場合、libmysqlclient.16.dylibファイルが破損していないことを確認する必要があります。 MacPortsの好意により/opt/local/lib/mysql5/mysql/libmysqlclient.16.dylibにインストールされた私のコピーは、MD5署名c79ee91af08057dfc269ee212915801aを持ち、サイズは1,462,376バイトです。あなたのコピーはどのように見えますか?
55
Brian Clapper

DYLD_LIBRARY_PATH実行後pip installまたはeasy_install

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

MySQLインストールが/usr/local/mysql

92
lukmdo

Easy_installの後、問題を解決するソフトリンクを作成します

Sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
41
msbanik

また、MySQLクライアントがMySQL-pythonパッケージよりも新しい場合にも発生します。私の場合、マシンにはlibmysqlclient_r.18.dylibがありましたが、libmysqlclient_r.16.dylibはありませんでした。ランニング pip search mysql明らかにした

MySQL-python-Python MySQLへのインターフェースインストール済み:1.2.3最新:1.2.3c1

pip install --upgrade MySQL-python私の問題を修正しました。

8

私の設定(brewのmysql 5.7.x、pyenv)には、新しいlibファイルlibmysqlclient.20.dylib。働いたのはpip uninstall MySQL-pythonおよびpip install MySQL-python

7
Giannis

MySQL 5.7.9の最新バージョンでは、MySQL-pythonからのサポートはなく、代わりにPyMySQLライブラリを使用しました。また、manage.py(Djangoプロジェクト))にこれらの行を追加して、MySQL-pythonのAPIをエミュレートします。

try:
    # load MySQLdb interface emulation
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass
7

MySQLdbとPyMySQLの両方をインストールする必要がある(または持っている)私の場合(私の場合、PyMySQLを使用してローカルMySQLインスタンスに接続し、MySQLDbをリモート/ライブインスタンスに接続するため、両方をインストールする必要があります):

正しいURIスキームを使用していることを確認してください。ローカルインスタンスにアクセスするには:

LOCAL_DATABASE_URI = 'mysql+pymysql://username:[email protected]/dbname'

そしてライブ用:

REMOTE_DATABASE_URI = 'mysql+mysqldb://username:[email protected]/dbname'

この区別をすることで問題が解決しました

0
kip2