Postgres macアプリでpostgresをセットアップしようとして、このエラーが発生しましたが、解決できませんでした。何かご意見は?
ImportError: dlopen(/Users/Craig/pyenv/mysite/lib/python2.7/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: @executable_path/../lib/libssl.1.0.0.dylib
Referenced from: /Applications/Postgres.app/Contents/MacOS/lib/libpq.dylib
Reason: image not found
$ Sudo ln -s /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /usr/lib
$ Sudo ln -s /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /usr/lib
Djangoでの作業中にこのエラーが発生しました。上記のコマンドを発行する必要があるDjango == 1.5ではなく、Django == 1.3でvirtualenvで動作しています。
OS X El Capitanでは、システム保護を無効にせずにこれらのリンクを行うことはできませんが、/ usr/local/libにリンクすればうまく機能します
Railsで同様の問題を処理するときに、私にとっては有効な解決策を見つけました。以下を.bash_profile、.bash_rc、または同等のものに追加します。
export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib:$DYLD_LIBRARY_PATH
(Postgres.appをデフォルトの場所にインストールしたと仮定します)。その後、ターミナルセッションを再起動して、もう一度試してください。
DYLD_LIBRARY_PATHに直接エクスポートすると、それに依存する他のアプリで深刻な問題が発生する可能性がありますが、フォールバックパスを使用することでこれらの問題を回避できます。
参照: https://github.com/PostgresApp/PostgresApp/issues/109#issuecomment-18387546
[〜#〜] edit [〜#〜]:psqlを実行しようとすると、DYLD_FALLBACK_LIBRARY_PATHを設定するとエラーが発生するようです。これを修正するには、次の2行を.bash_profileに追加します。
alias psql="(. ~/.bash_profile; unset DYLD_FALLBACK_LIBRARY_PATH; psql)";
これは、bashを使用しており、.bash_profileがホームディレクトリにあることを前提としています。そうでない場合(または.bash_profileの代わりに.bashrcまたは他の環境設定を使用している場合)、~/.bash_profile
環境設定スクリプトへのパスへのコマンドの一部。
エイリアスコマンドは基本的に、現在のbash環境に影響しないサブシェルを起動します。したがって、DYLD_FALLBACK_LIBRARY_PATH変数の設定を解除すると、一時的なものになります。 psqlを終了すると、環境変数が再び設定されます。
この問題は、解決するのに丸一日かかりました。 http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/ の議論は本当に役に立ちました。ジュリーの答えのおかげで、私の問題(Mac)の解決策は次のとおりです。
Brewを使用してopenssl 1.0.0をインストールします。
brew install openssl
次のコマンドを使用します。
export DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/**1.0.1x**/lib
1.0.1x部分を現在のバージョンに置き換えます。私にとっては1.0.1hです。
お役に立てれば!
編集:1日後、データベースに接続する必要があるときは毎回2番目のコマンドを入力する必要があるので、この問題の永続的な解決策ではありません。
これは、Postgresqlをアップグレードし、psycopg2をvirtualenvにインストールした後に起こりました。再インストール(再構築)がうまくいきました。
pip uninstall psycopg2
pip install psycopg2
ロードする前のbash環境で、これを試してください:
export DYLD_LIBRARY_PATH=/Library/PostgreSQL/x.y/lib
..「x.y」をシステム上のバージョンに置き換えます。
KindOfGuyが指摘したように、これをbashプロファイルに設定すると他のプログラムに干渉する可能性があることに注意してください。
..もちろん、bashプロンプトから実行していない場合は、pyenvで可能な方法で環境を設定する必要があります。 ..pyenv自体を編集して最上部に配置することもできます。
もう1つの方法は、psycopg2をインポートする前に実行するpythonスクリプトにこれを置くことです。
import os
os.environ['DYLD_LIBRARY_PATH'] = '/Library/PostgreSQL/x.y/lib'
..again、 'x.y'を/ Library/PostgreSQLのシステムのバージョンに置き換えます。
El capitanでpostgres.app 9.4から9.5にアップグレードしたときに、この問題が発生しました。
他のソリューションは、特定のディレクトリに対するシステムロックのため、el capitanでは(簡単に)動作しません。つまり、シンボリックリンクソリューションはほとんどの場合、アクセスしにくく、理想的ではありません。
これにより、フォールバック変数が残ります。現在の回答は間違ったディレクトリを指しています。 2013年以降、dylibsディレクトリが変更されたと思われます。
だから、ここに私のために働く最新のフォールバックディレクトリがあります:
export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/Versions/latest/lib:$DYLD_LIBRARY_PATH
全体像、問題は、必要なライブラリが見つからなかったことです。 Appleの オープンソースコンパイラツール 、libssl
、およびpsycopg2
を使用して、install_name_tool
がotool
を探す場所を変更できます。これらはOS Xに同梱されており、マニュアルページはman <command>
で利用できます。
エラーメッセージに記載されているpsycopg2
モジュールディレクトリに移動します。そこに一度:
$ otool -L _psycopg.so
...
@executable_path/../lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
...
_psycopg2.so
が検索するライブラリをリストします。 install_name_tool
を使用して、表示場所を変更できます。
$ install_name_tool -change @executable_path/../lib/libssl.1.0.0.dylib /usr/local/opt/openssl/lib/libssl.1.0.0.dylib _psycopg.so
もちろん、libssl.1.0.0.dylib
がある場所に合わせて調整する必要があります。私が与えた例はデフォルトのHomebrewパスですが、AnacondaやPostgreSQLアプリバンドルから入手することもできます。 (まだお持ちでない場合はbrew install openssl
。)libcryptoについても繰り返す必要があります。
_psycopg2.so
の作成方法によっては、この変更の実行に失敗する場合があります。その場合は、カスタムライブラリパスを使用して自分でモジュールをビルドすることもできますが、それについては触れません。
この方法には、libssl 1.0.0をdyld
の検索パスにリンクする方法(ln -s
を使用するか、DYLD_*
環境変数を設定する)よりも狭く、したがってリスクが少ないという利点があります。 (これらのアプローチに対する警告は pair of discussions および some code で参照してください。dyld
からman dyld
までの詳細をご覧ください。) psycopg2
のコピーごとに繰り返されます。独自の冒険を選択してください。
免責事項:この回答の内容のほとんどは、私が1日でまとめた知識からのものです。私は専門家ではありません。
Mac OS X 10.11(El Capitan)では、/usr/lib
は、rootユーザーに対してのみ読み取られます。 ln: /usr/lib/libssl.1.0.0.dylib: Operation not permitted error
を使用する必要があります/usr/local/lib
の代わりに /usr
。
$ Sudo ln -s /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /usr/local/lib
$ Sudo ln -s /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /usr/local/lib
Postgres.appを(9.3から9.4に)アップグレードしたため、同じエラーが発生しました。
解決策は、Postgres.appバージョン9.3を指していたため、pipキャッシュホイールを削除することでした。
私はこのようにpsycopgホイールキャッシュファイルを見つけました
grep -r psycopg ~/.pip/cache
最後のコマンドで見つけたディレクトリを削除しました。
私に合ったこの解決策を見つけました
Sudo cp /Applications/Postgres.app/Contents/Versions/9.3/lib/libssl.1.0.0.dylib /usr/lib
Sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
Sudo cp /Applications/Postgres.app/Contents/Versions/9.3/lib/libcrypto.1.0.0.dylib /usr/lib
Sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib
Psqlがマシンにインストールされている場所に応じて、この部分「/Applications/Postgres.app/Contents/Versions/9.3/」を置き換えます。 psqlがインストールされている場所を見つけるコマンド:which psql
コメントからの更新:OSX 10.11(El Capitan)では、/ usr/libにファイルをコピーできなくなりました。/usr/local/libを使用します
Postgresqlクライアントパッケージが欠落していたため、brewでインストールし、この問題を修正しました。
brew update
brew doctor
brew install postgresql
pip install psycopg2-binary
魅力のように機能します!
更新してみてくださいpsycopg2
使用pip install psycopg2 --upgrade
最新バージョンに変更してから、もう一度試してください。
ちょうど私のために働いたものを共有したかった。私はjupyterでAnacondaを使用していました。以下はうまくいきました:
DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/1.0.2k/lib jupyter notebook
しかし、その後、別のライブラリのインポート(プロット)で問題が発生しました。 pipで遊んだ後、おそらくcondaを代わりに使用する必要があることに気付き、次のようにすべてが修正されたようです。
conda install psycopg2
Mysqlでも同様の問題が発生しています。要求されたライブラリは、ロードに失敗しています/usr/local/mysql/lib/libmysqlclient_r.16.dylib
ただし、このディレクトリには、ライブラリの新しいバージョンがあります:/usr/local/mysql/lib/libmysqlclient.20.dylib
私はvirtualenvwrapperで作業しており、以前にインストールした依存関係をすべて再インストールしようとしましたが、役に立ちませんでした。どんな援助も大歓迎です。
つかいます psycopg2-binary
代わりに
pip install psycopg2-binary
私のために働いた解決策は、「no-binary」オプションを設定してpsycopg2をインストールすることで、psycopg2にシステムlibsslを使用するように指示しました。
デフォルトでは、psycopg2は独自のバージョンのlibsslを使用しており、アップグレード後に存在しなくなった古いバージョンのライブラリに依存しているようです。
No-binaryオプションの詳細については、 psycopg2 install docs を参照してください。
pip uninstall psycopg2
pip install --no-binary :all: psycopg2
Psycopg2をインストールしましたか? pythonとpostgresqlを統合するために必要です。
1つまたは複数のファイルlibssl.1.0.0.dylibを見つけて、 '/ usr/local/lib /'にコピーしてみてください。Originは '/ Library/PostgreSQL/11/lib /'でした(バージョンをまたは、「/ usr/local/lib /」にすべてコピーして、Originに移動し、次のように入力します。Sudocp */usr/local/lib /すべてのファイルをコピーします。私は解決策を見つけ、それを解決して私のものを解決しました https://oscarvalles.wordpress.com/2017/03/24/dlopenlibrary-not-loaded-libssl-dylib-fail-to-import-psycopg2-in- virtualenv /