web-dev-qa-db-ja.com

Psycopg2イメージが見つかりません

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
56
Craig Cannon
$ 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にリンクすればうまく機能します

83
philippinedev

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を終了すると、環境変数が再び設定されます。

18

この問題は、解決するのに丸一日かかりました。 http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/ の議論は本当に役に立ちました。ジュリーの答えのおかげで、私の問題(Mac)の解決策は次のとおりです。

  1. Brewを使用してopenssl 1.0.0をインストールします。

     brew install openssl
    
  2. 次のコマンドを使用します。

    export DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/**1.0.1x**/lib
    

    1.0.1x部分を現在のバージョンに置き換えます。私にとっては1.0.1hです。

お役に立てれば!

編集:1日後、データベースに接続する必要があるときは毎回2番目のコマンドを入力する必要があるので、この問題の永続的な解決策ではありません。

10
jdeng

これは、Postgresqlをアップグレードし、psycopg2をvirtualenvにインストールした後に起こりました。再インストール(再構築)がうまくいきました。

pip uninstall psycopg2
pip install psycopg2
10
aeikenberry

ロードする前の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のシステムのバージョンに置き換えます。

9
Mr. B

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
6
Mykel

全体像、問題は、必要なライブラリが見つからなかったことです。 Appleの オープンソースコンパイラツールlibssl、およびpsycopg2を使用して、install_name_toolotoolを探す場所を変更できます。これらは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日でまとめた知識からのものです。私は専門家ではありません。

3
duozmo

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
3
splanquart

Postgres.appを(9.3から9.4に)アップグレードしたため、同じエラーが発生しました。

解決策は、Postgres.appバージョン9.3を指していたため、pipキャッシュホイールを削除することでした。

私はこのようにpsycopgホイールキャッシュファイルを見つけました

grep -r psycopg ~/.pip/cache

最後のコマンドで見つけたディレクトリを削除しました。

2
therealmarv

私に合ったこの解決策を見つけました

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を使用します

2
Mit Mehta

Postgresqlクライアントパッケージが欠落していたため、brewでインストールし、この問題を修正しました。

brew update
brew doctor
brew install postgresql
2
agentargo
pip install psycopg2-binary

魅力のように機能します!

1
vinci mojamdar

更新してみてくださいpsycopg2使用pip install psycopg2 --upgrade最新バージョンに変更してから、もう一度試してください。

0
Noopur Phalak

ちょうど私のために働いたものを共有したかった。私はjupyterでAnacondaを使用していました。以下はうまくいきました:

 DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/1.0.2k/lib  jupyter notebook

しかし、その後、別のライブラリのインポート(プロッ​​ト)で問題が発生しました。 pipで遊んだ後、おそらくcondaを代わりに使用する必要があることに気付き、次のようにすべてが修正されたようです。

conda install psycopg2
0
chris838

Mysqlでも同様の問題が発生しています。要求されたライブラリは、ロードに失敗しています/usr/local/mysql/lib/libmysqlclient_r.16.dylib

ただし、このディレクトリには、ライブラリの新しいバージョンがあります:/usr/local/mysql/lib/libmysqlclient.20.dylib

私はvirtualenvwrapperで作業しており、以前にインストールした依存関係をすべて再インストールしようとしましたが、役に立ちませんでした。どんな援助も大歓迎です。

0
Eoin Traynor

つかいます psycopg2-binary代わりに

pip install psycopg2-binary
0
maxrudometkin

私のために働いた解決策は、「no-binary」オプションを設定してpsycopg2をインストールすることで、psycopg2にシステムlibsslを使用するように指示しました。

デフォルトでは、psycopg2は独自のバージョンのlibsslを使用しており、アップグレード後に存在しなくなった古いバージョンのライブラリに依存しているようです。

No-binaryオプションの詳細については、 psycopg2 install docs を参照してください。

pip uninstall psycopg2
pip install --no-binary :all: psycopg2
0
Brendan Quinn

Psycopg2をインストールしましたか? pythonとpostgresqlを統合するために必要です。

0
Ari

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 /

0
Delmehr