26

pip install psycopg2私はMacシステムで簡単にしました。正常にインストールされましたが、psycopg2 を使用しようとするとエラーが発生します。

Reason: Incompatible library version: _psycopg.so requires version 1.0.0 or later, but libssl.0.9.8.dylib provides version 0.9.8

pip freezeちょうどpsycopg2==2.4.5いいです。いくつかの virtualenv に psycopg2 をインストールしましたが、このようなエラーが表示されるのはこれが初めてです。アンインストールして再インストールしてみましたが、同じ結果でした。助けてください

4

10 に答える 10

53

ここで受け入れられた答えは正しいです(ただし、それは ln -fs でなければならないと思います。実際、そうでない場合(?)、OSを不安定にするリスクさえあると思います)。これに遭遇して対処した後、この問題の完全な解決策と、Mountain Lion と Snow Leopard の Postgres 9.* で遭遇する他の lib 問題 (libcrypto.1.0.0.dylib) を収集したいと思います。おそらく他のシステム。これにより、同じ2つのライブラリについて不平を言うpsqlの実行もブロックされました。

/usr/lib基本的に、libssl と libcryptoには 2 つの新しいバージョンのライブラリが必要です。これらのライブラリの必要なバージョンは、Postgres lib ディレクトリにあります。

  • OSX で、Postgres の Enterprise DB バージョンをインストールした場合、これは/Library/PostgreSQL/9.2/lib.
  • 他のインストール タイプの Postgres の場合は、Postgress インストール ディレクトリ内の lib ディレクトリを探します。たとえば、Postgress.app の場合は/Applications/Postgres.app/Contents/MacOS/lib、.
  • のどこかで醸造するために/usr/local/Cellar
  • *nix 上で、インストール先がどこであっても。ただし、ディストリビューションにパッケージ マネージャーを介して新しいバージョンがある場合は、最初に *nix を参照してください。

最初に、これら 2 つのライブラリの最新のものを Postgres lib ディレクトリから次の場所にコピーします/usr/lib

sudo cp /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /usr/lib
sudo cp /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /usr/lib

次に、このライブラリの /usr/lib シンボリック リンクを更新 (または作成) します。いずれにせよ、コマンドはln -fs次のとおりです。

sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib

修正する必要があります。確かに ln -fs は、シンボリックリンクを削除して再作成するよりも優れているため、libssl が存在しないときにそれを必要とする何かによって libssl が見つからなくなる可能性が少なくなります (同じことを行います。すでにそこにあり、入力するよりも高速です)。/usr/lib をいじることには常に注意してください。

于 2012-09-12T22:50:43.600 に答える
41

私のために働いた:

env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib
-L/usr/local/opt/readline/lib' pip install psycopg2

出典: Mac OS X 10.7 の virtualenv で pip を使用して psycopg2 をインストールできない

于 2019-11-27T19:18:51.483 に答える
24

Mountain Lion にアップグレードした後、同様の問題に遭遇しました。

Slack の提案に従って libssl.* ファイルをコピーする代わりに、それ/usr/lib/libssl.dylibが実際にライブラリの最新バージョンへのソフト リンクであることを確認してください。

たとえば、私のマシンでls -l /usr/lib/libssl*は、次のようになります。

lrwxr-xr-x  1 root  wheel    46B Jun 27 15:24 /usr/lib/libssl.1.0.0.dylib -> /Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib
lrwxr-xr-x  1 root  wheel    27B Jul 30 10:31 /usr/lib/libssl.dylib -> /usr/lib/libssl.1.0.0.dylib

libssl.dylibエラー バージョンが言及しているバージョンにリンクしていない場合は、そのバージョンのライブラリがあることを確認/usr/lib/libssl.dylibしてから、古いバージョンではなく、それを指していることを確認してください。

リンクが存在しない場合は、そのように作成します

sudo ln -s library_to_link_to link_to_create

もちろん、マシンに適した場所を使用してください。私にとって、これは次のようになりました。

sudo ln -s /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib

編集

私のソリューションの一部に問題があるようです。つまり、これらの重要なライブラリを削除すると、一時的にでもオペレーティング システムに問題が発生します。

Purrell 's answer に従って-fs、コマンドを使用するときに必ずフラグを含めるようにしてくださいln。これにより、ライブラリが短期間失われないようにすることができます。例えば、

sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib
于 2012-07-30T14:40:05.673 に答える
4

OSX 10.11、El Capitan では、シンボリックリンクを置き換えるソリューションが報告されOperation not permittedました。私にとってうまくいった解決策は、brewを使用してDYLD_LIBRARY_PATHを設定することでした。そう:

brew install openssl

openssl brew libs が配置されている場所を見つけ (brew --prefix openssl役立つ場合があります)、 directory から検索を開始し/usr/local/Cellar/opensslます。私の場合、それは/usr/local/Cellar/openssl/1.0.2d_1/lib

最後に DYLD_LIBRARY_PATH を設定します。つまり、次のような行を .bash_profile に追加します。

# replace location of lib files with folder name you found in previous step
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/Cellar/openssl/1.0.2d_1/lib

更新:より一般的な/より良い代替手段は次のとおりです(@dfrankowに感謝):

  • brew を使用して openssl の場所を見つけるには (注意、brew は遅くなる可能性があります):DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$(brew --prefix openssl)/lib
  • 開発目的では、DYLD_FALLBACK_LIBRARY_PATH代わりに使用する方が良いかもしれません-これを確認してください

シェルを再起動するか、単にsource ~/.bash_profilepsycopg2 を再インストールします。

pip uninstall psycopg2
pip install psycopg2

動作するかどうかをテストします。

$ python -c"import psycopg2  ;   print('psycopg2 is now ok')"
于 2015-10-09T09:32:46.027 に答える
2

syncdb Postgres 9.1 と /psycopg2/_psycopg.so を実行しようとすると、さらにエラーが追加されました。

ライブラリがロードされていません: @loader_path/../lib/libcrypto.dylib 参照元: /usr/lib/libpq.5.dylib 理由: ライブラリのバージョンに互換性がありません: libpq.5.dylib にはバージョン 1.0.0 以降が必要ですが、libcrypto. 0.9.8.dylib はバージョン 0.9.8 を提供します

これらの 6 つのファイルを次の場所からコピーすることで解決しました。

ローカル:/ライブラリ/PostgreSQL/9.1/lib/

libssl.1.0.0.dylib

libssl.a

libssl.dylib

libcrypto.1.0.0.dylib

libcrypto.a

libcrypto.dylib

宛先: LOCAL:/usr/lib

これは、virtualenv (1.8.2) および pgAdmin (1.14.3) に Web がある Mac OSx 10.8.1 でした。virtualenv の内部は次のとおりです。

ジャンゴ==1.4

psycopg2==2.4.5

...など...そして今は通常に戻っています。

于 2012-09-09T16:22:09.717 に答える
2

私にとって、libcryto と libss バージョン 1.0.0 は以下にあります。

/Library/PostgreSQL/9.1/lib/libcrypto.1.0.0.dylib
/Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib

私の問題を解決するコマンドは次のとおりです。

sudo ln -fs /Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
sudo ln -fs /Library/PostgreSQL/9.1/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib
于 2012-10-15T09:58:04.383 に答える
1

私の友人は、libssl。*ファイルをPostgreSQLのlibディレクトリから/ usr / libにコピーし、アプリケーションを再起動するだけです。この場合、すべてが完璧になります^ _ ^

于 2012-07-22T12:03:53.487 に答える
0

ライブラリをシステム ディレクトリにコピーすることに抵抗がある場合は、DYLD_LIBRARY_PATH 環境変数を使用して、OS に強制的に Postgres のライブラリ ディレクトリで libssl を検索させることができます。例えば:

$ DYLD_LIBRARY_PATH=/Library/PostgreSQL/9.4/lib pip install psycopg2

(マニュアルページの下に文書化されていdyldます)。

于 2014-12-19T18:27:22.263 に答える