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 __== '__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のSystem Integrity Protection(SIP、「ルートレス」とも呼ばれる)により、/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.so理由:画像が見つかりません
さて、問題のファイルは/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でエラーが発生していました。 DMGのOracle/MySQL WebサイトからMySQL Community Serverを直接インストールしました。
Libファイルを/ usr/local/libディレクトリにシンボリックリンクするだけでした。
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
両方とも働いた。
Homebrewを使用している場合は、次の方法で修正できます。
$ brew link mysql
Pydev Eclipseプラグインでは、DYLDの環境変数を設定できます。パスは次のように設定できます
エルキャピタンにいる場合、エラーが表示されます:ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted
「システム整合性保護」を閉じる必要があります。
最初にリブートしてcmd + Rを押してリカバリモードに入り、ターミナルを起動してコマンドcsrutil disable
を入力します。これでリブートして再試行できます。
SIP(rootlessがusr/lib /へのアクセスを防ぐ)がデフォルトでオンになっているEl Capitanの新規インストールでは、リカバリモードでない限りシンボリックリンクを作成できません。 @yannisxuが言ったように、SIPを無効にし、/ usr/lib/localへのシンボリックリンクを作成すれば、これは機能します。
sIPをオフにする代わりに、MAC OSX El Capitanで次のコマンドを使用できます。
Sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
以前はrootとしてログインできるオプションがあり、これによりSIPを無効にできますが、現在廃止されている最終リリースでは、こちらで詳細を読むことができます: https:// forums .developer.Apple.com/thread/4686
質問:
開発者ベータ1にはnvram boot-argsコマンドがあり、root権限で実行すると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}"
MacOS上のMySQL Connector/Cのバグに関する注意(現在のバージョンは10.13.2です)、mysql_configを修正し、mysqlclientまたはMySQL-pythonを再インストールします ここに詳細があります
http://dev.mysql.com/downloads/connector/c/ に移動し、MySQL Connector/Cをダウンロードします。パッケージを取得したら、新しいディレクトリ「mysql」を作成し、mysqlディレクトリの下にMysql Connectorファイルを解凍し、mysqlの下に別の空のディレクトリ「build」を作成します。「build」を使用してMySQL Connector/Cをビルドします。 cd build && cmake ../your-MySQL-Connector-source-dir make && make install後にmake installを実行すると、/ usr/localの下にmysqlという名前のディレクトリが作成されます。このディレクトリに必要なすべてのヘッダーとライブラリが含まれており、ヘッダーとライブラリを対応する場所にコピーします。
私はこの問題を抱えていましたが、それを修正する方法を見つけるのにしばらく時間がかかりました。
私の場合は少し異なります。 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にダウングレードしました。
あなたが試すことができます:
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`