python mysqldb:ライブラリがロードされていない:libmysqlclient.18.dylib
-
28-10-2019 - |
質問
Mac OS 10.6にPython 2.7用にMySQLDBをコンパイルしてインストールしました。インポートする簡単なテストファイルを作成しました
import MySQLdb as mysql
第一に、このコマンドは赤色になっており、情報は「未解決のインポート」を教えてくれます。それから私は次の簡単なPythonコードを実行しようとしました
import MySQLdb as mysql
def main():
conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",user="root", passwd="",db="" )
if __name__ == '__main__'():
main()
実行すると、次のエラーメッセージが表示されます
Traceback (most recent call last):
File "/path/to/project/Python/src/cvdv/TestMySQLdb.py", line 4, in <module>
import MySQLdb as mysql
File "build/bdist.macosx-10.6-intel/egg/MySQLdb/__init__.py", line 19, in <module>
\namespace cvdv
File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 7, in <module>
File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so
Reason: image not found
私の問題の解決策は何でしょうか?
編集:実際、ライブラリが/usr/local/mysql/libにあることがわかりました。だから、Pydev Eclipseバージョンをどこで見つけるかを伝える必要があります。これをどこに設定できますか?
解決
ライブラリへの象徴的なリンクを作成することにより、問題を解決しました。すなわち
実際のライブラリはにあります
/usr/local/mysql/lib
そして、私はシンボリックリンクを作成しました
/usr/lib
コマンドの使用:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
次のマッピングがあります。
ls -l libmysqlclient.18.dylib
lrwxr-xr-x 1 root wheel 44 16 Jul 14:01 libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib
それだけでした。その後、すべてが正常に機能しました。
編集:
Macos el Capitanなので、システムの整合性保護(SIP、「rootless」とも呼ばれます)がリンクを作成できないことに注意してください。 /usr/lib/
. 。以下でSIPを無効にすることができます これらの指示, 、しかし、リンクを作成できます /usr/local/lib/
代わりは:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
他のヒント
私の好みの方法は、アプリケーションの実行方法に応じて実際にスコープにある場合とそうでない場合がある環境変数で再生するのではなく、実際にライブラリを修正することです。これは実際にはかなり単純なプロセスです。
まず、エラー出力を見て、問題のあるPythonモジュールがどこにあるかを確認してください。
ImporterRor:dlopen(/library/python/2.7/site-packages/_mysql.so、2):ライブラリが読み込まれていない:libmysqlclient.18.dylibは:/library/python/2.7/site-packages/_mysql.sosの理由:理由:理由:画像が見つかりません
さて、問題のファイルは/library/python/2.7/site-packages/_mysql.soです
次に、_mysql.soがlibmysqlclient.18.dylibを見つけるべきであると考えている場所を把握します。
% otool -L /Library/Python/2.7/site-packages/_mysql.so
/Library/Python/2.7/site-packages/_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 169.3.0)
だから、それはパス情報のないlibmysqlclient.18.dylibを探しています、それを修正しましょう:
% sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Python/2.7/site-packages/_mysql.so
_mysql.soは、環境変数に関係なく、ライブラリへのフルパスを知っており、すべてが機能します。
% otool -L /Library/Python/2.7/site-packages/_mysql.so
/Library/Python/2.7/site-packages/_mysql.so:
/usr/local/mysql/lib/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 169.3.0)
象徴的なリンクを作成するのではなく、この問題の別の解決策があることがわかりました。
libmysqlclient.18.dylibが存在するディレクトリへのパスをDyld_library_path環境変数に設定します。私がしたことは、.bash_profileに次の行を置くことです。
export DYLD_LIBRARY_PATH=/usr/local/mysql-5.5.15-osx10.6-x86/lib/:$DYLD_LIBRARY_PATH
それでおしまい。
私の場合、Mac OS X 10.9 Mavericksでエラーが発生していました。 MySQLコミュニティサーバーをDMGからOracle/MySQL Webサイトから直接インストールしました。
私がしなければならなかったのは、/usr/local/libディレクトリにlibファイルをSymlinkすることだけでした。
mkdir -p /usr/local/lib
ln -s /usr/local/mysql/lib/libmysql* /usr/local/lib
ボーナス:Mac OS Xも実行している場合、libmysqlclient.18.dylibファイルのようなファイルを見つけるための優れたツールがあります。 http://apps.tempel.org/findanyfile. 。これは、Dylibファイルの場所を最初に見つけた方法です。
私はこれをあなたの.profileまたは.bashrc(あなたが使用している方)に最も簡単な方法であることがわかりました、それを行うための最も簡単な方法、Symリンクはあなたのソースファイルにパスを保持するのと比較して乱雑です。
また、Yoshisurfsの回答と比較して、MySQLがインストールされるほとんどの場合、MySQLディレクトリは、使いやすいためにファイル名全体ではなくMySQLのみに名前が変更される必要があります。
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
いくつかの仮想環境でこれに遭遇しました。
pip uninstall MySQL-python
pip install -U MySQL-python
両方の時間に働いた。
Pydev Eclipseプラグインでは、DYLDの環境変数を設定することをお勧めします。パスは、示されているように設定できます
自家醸造を使用している場合は、これを修正することができます。
$ brew link mysql
あなたがエル・カピタンにいるとき、エラーが得られます: ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted
「システム整合性保護」を閉じる必要があります。
まず、CMD + Rを再起動して保持して回復モードに入り、端子を起動してコマンドを入力します。 csrutil disable
, 、これで再起動して再試行できます。
SIP(rootlessがUSR/LIB/へのアクセスを防止する)の新しいEl Capitanインストールでは、デフォルトでは、リカバリモードでない限りSymlinkを作成することはできません。 @yannisxuが言ったように、SIPを無効にして/usr/lib/localにsymlinkを行うと、これが機能します。
SIPをオフにする代わりに、Mac OSX El Capitanで次のコマンドを使用できます。
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
以前は、ルートとしてログインできるオプションがあり、これによりSIPが無効になりますが、現在は廃止されている最終リリースでは、こちらについて詳しく読むことができます。 https://forums.developer.apple.com/thread/4686
質問:
開発者ベータ1で利用可能なNVRAM Boot-Argsコマンドがあり、ルート特権で実行されたときにSIPを無効にできます。
nvram boot-args="rootless=0"
SIPを無効にするこのオプションは、El Capitanリリースバージョンでも利用できますか?それとも、これは開発者のビルドのために厳密ですか?
答え:
このNVRAM Boot-Argsコマンドはなくなります。 El Capitanリリースバージョンでは利用できず、開発者ベータ版の終了前に消える可能性があります。将来の開発者ベータのリリースノートに注目してください。
私の場合、エル・カピタン(OSX 10.11)で、私はフォローしなければなりません ~/.bash_profile
export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:${DYLD_LIBRARY_PATH}"
export PATH="/usr/local/mysql/lib:${PATH}"
私はこの問題を抱えていたので、それを修正する方法を理解するのにしばらく時間がかかりました。
私のケースは少し異なります。私のMySQLサーバーはバージョン5.1.xです。どういうわけか、MySQL-Pythonを1.2.3から1.2.5にアップグレードしました。そして、私は次のソフトリンクを追加して以来、この問題を獲得し続けました。
libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib
mysql 5.1.xの場合、libmysqlclient.18.dylibは存在しませんが、libmysqlclient.16.dylibのみであることがわかります。 MySQL-Pythonを1.2.3にダウングレードするか、MySQLサーバーを5.6.xにアップグレードすることで、この問題を修正できます(5.5.xを試していません)
MySQLのアップグレードは私にとって選択肢ではないため、ライブラリを1.2.3に格下げしました。
行きます http://dev.mysql.com/downloads/connector/c/ mysqlコネクタ/cをダウンロードします。パッケージを取得した後、新しいディレクトリ「MySQL」を作成し、MySQLコネクタファイルをディレクトリMySQLの下で非圧縮し、MySQLの下で別の空のディレクトリ「ビルド」を作成します。 cd build && cmake ../your-mysql-connector-source-dir make && make install install、under/usr/localという名前のディレクトリを取得します。必要なすべてのヘッダーとLIBが含まれています。このDirctoryには、ヘッダーとLIBを対応する場所にコピーします。
あなたが試すことができます:
sudo install_name_tool -change libmysqlclient.18.dylib /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so`
MACOSのMySQLコネクタ/Cのバグ(私の現在のバージョンは10.13.2)、MySQL_Configを修正し、MySQLClientまたはMySQL-Pythonを再インストールすることについての注意 これが詳細です