web-dev-qa-db-ja.com

libsslエラーを発生させずにEl Capitanでpsycopg2を実行する方法

Macでpython Django devをセットアップしていて、El Capitanにアップグレードしたところです。

Virtualenvにpsycopg2をインストールしましたが、サーバーを実行すると次のエラーが発生します-

Django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: dlopen(/Users/aidan/Environments/supernova/lib/python2.7/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: libssl.1.0.0.dylib
  Referenced from: /Users/aidan/Environments/supernova/lib/python2.7/site-packages/psycopg2/_psycopg.so
  Reason: image not found

私はvirtualenvを再インストールしてみました

pip install -f requirements.txt

そして、私はpsycopg2をアップグレードしようとしました

pip uninstall psycopg2
pip install psycopg2

しかし、まだ同じエラーが発生します。

私も試しました シンボリックリンクを追加する/usr/libしかし、El Capitanの新しい根のないものはそれを許可しません-

$ Sudo ln -s /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib
 /usr/lib
ln: /usr/lib/libssl.1.0.0.dylib: Operation not permitted

だから私は/usr/local 無駄に。

Opensslのシステムバージョンは1.0.2のようです-

$ openssl version
OpenSSL 1.0.2d 9 Jul 2015

どうすれば修正できますか?

18
Aidan Ewen

私は以下を試しました:

私は自分のマシンにbrewをインストールしました。 _$ brew doctor_を実行すると、次のことを行うように提案されました。

$ Sudo chown -R $(whoami):admin /usr/local

これが完了したら、_psycopg2_を再インストールし、次を実行しました。

_$ Sudo ln -s /Library/PostgreSQL/9.3/lib/libssl.1.0.0.dylib /usr/local/lib/
$ Sudo ln -s /Library/PostgreSQL/9.3/lib/libcrypto.1.0.0.dylib /usr/local/lib/
_

PostgreSQLのバージョンとパス_/usr/local/lib_に注意してください。

これを行うと、再び動作する設定に戻りました。

追伸:醸造所が提案した手順はここでは関係ないかもしれませんが、許可の問題が発生しているため、これを採用しました。 ルートレスモードを無効にすることもできます。

22
Nandeep Mali

その理由は確かに、いくつかのPostgreSQLライブラリへの相対パスを使用するpsycopg2です。それを修正するために私は使用しました

Sudo install_name_tool -change libpq.5.dylib /Library/PostgreSQL/9.4/lib/libpq.5.dylib /Library/Python/2.7/site-packages/psycopg2/_psycopg.so
Sudo install_name_tool -change libcrypto.1.0.0.dylib /Library/PostgreSQL/9.4/lib/libcrypto.1.0.0.dylib /Library/Python/2.7/site-packages/psycopg2/_psycopg.so
Sudo install_name_tool -change libssl.1.0.0.dylib /Library/PostgreSQL/9.4/lib/libssl.1.0.0.dylib /Library/Python/2.7/site-packages/psycopg2/_psycopg.so

相対パスを絶対パスに変換します。もちろん、psycopg2を再インストールするたびにこれを行う必要があります。

17
ArtHarg

アナコンダを使用しますか?もしそうなら、私にとってうまくいった非常に単純な解決策は、単にcondaを使用してインストールすることでした。

具体的には、コマンドラインで次のように入力します。

conda psycopg2をインストール

7
MV22

@ArtHargソリューションに基づいて、python 3.4、PostgreSQL 9.5およびOS X el capitanでこれを使用しました:

Sudo install_name_tool -change libpq.5.dylib /Library/PostgreSQL/9.5/lib/libpq.5.dylib /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/psycopg2/_psycopg.so
Sudo install_name_tool -change libcrypto.1.0.0.dylib /Library/PostgreSQL/9.5/lib/libcrypto.1.0.0.dylib /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/psycopg2/_psycopg.so
Sudo install_name_tool -change libssl.1.0.0.dylib /Library/PostgreSQL/9.5/lib/libssl.1.0.0.dylib /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/psycopg2/_psycopg.so
1
Mohsenasm

El Capitan 10.11.5とpython 3.5.1で、インポートしようとすると同じエラーが発生しましたpsycopg2、シンプルなコンソールまたはPyCharm内。私はルートに到達することでこれをなんとか修正しました:

Sudo su -

次に、2つのライブラリをシンボリックにリンクします。

ln -s /Library/PostgreSQL/9.5/lib/libssl.1.0.0.dylib /usr/local/lib
ln -s /Library/PostgreSQL/9.5/lib/libcrypto.1.0.0.dylib /usr/local/lib

その後、connection error終了したメッセージ:

psycopg2.OperationalError: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

私のPostgreSQLインストールは/ tmpのソケットをリッスンしていたため、接続を許可するには別のシンボリックリンクが必要でした:

ln -s /tmp/.s.PGSQL.5432 /var/pgsql_socket/
0
Peter Sinclair

これまで私が設定していたので、これも私にとって苦痛です

export DYLD_FALLBACK_LIBRARY_PATH=/Library/Postgresql/9.5/lib

私の.bash_profileで、すべてがうまくいきました。しかし、その環境変数は、新しいシェルに渡すことができない環境変数の1つです。 pythonログインシェルから実行してpsycopg2を正常にインポートできますが、テストスクリプトが停止します。

ここで、$ SIP_WORKAROUND_LIBRARY_PATHを同じ値に設定します。OSXはそのままにします。次に、次のようにする必要があります。

export DYLD_FALLBACK_LIBRARY_PATH=$SIP_WORKAROUND_LIBRARY_PATH

私のテストスクリプトでは、値をこっそりと調べます。それは理想からは程遠いですが、誰かを助けることを願っています。

0
scav