web-dev-qa-db-ja.com

Psycopg2 Python SSLサポートは組み込まれていません

私はsslmode = 'required'パラメータでpsycopg2を使用して自分のpostgresデータベースに接続しようとしています。しかし、私は次のエラーを受け取ります

_psycopg2.OperationalError: sslmode value "require" invalid when SSL support is not compiled in
_

私のシステムに関するいくつかの詳細を紹介します

  • Mac OS X El Capitan
  • Python 2.7
  • Psycopg2をpip経由でインストール
  • インストールpython homebrew経由

これは私が問題を修正するためにやろうとしたことです

  • _brew uninstall python_
  • _which python_はまだpython _/usr/local/bin/python_に住んでいるので、これをアンインストールしようとしましたができませんでした。これがpython OSを使用しており、アンインストールしないでください
  • _brew install python --with-brewed-openssl --build-from-source_
  • _pip uninstall psycopg2_
  • _pip install psycopg2_

これをすべて実行した後も、例外は発生します。私はこれを実行していますpythonスクリプトを介して_#!/usr/bin/env python_が重要かどうかはわかりませんが、それは_which python_が示すディレクトリとは別のディレクトリです

18
user2158382

Pip経由でインストールしているので、psycopg2の最新バージョン(2.6.1)を使用する必要があります。コードを少し調べたところ、postgresql-c-librariesを直接呼び出してdb-connectionを設定するconnection_int.cで例外がスローされているようです。呼び出しは次のように行われます。

self->pgconn = pgconn = PQconnectStart(self->dsn);

Dprintf("conn_connect: new postgresql connection at %p", pgconn);

if (pgconn == NULL)
{
    Dprintf("conn_connect: PQconnectStart(%s) FAILED", self->dsn);
    PyErr_SetString(OperationalError, "PQconnectStart() failed");
    return -1;
}
else if (PQstatus(pgconn) == CONNECTION_BAD)
{
    Dprintf("conn_connect: PQconnectdb(%s) returned BAD", self->dsn);
    PyErr_SetString(OperationalError, PQerrorMessage(pgconn));
    return -1;
}

Psycopg2.connect()への接続ステートメントで指定されたキーワードはその関数に対して処理されており、エラーはOperationalError例外として返されます。

エラーは実際にpostgresql-libで直接生成されています-使用しているバージョン、ビルド方法を確認し、可能であれば、SSLサポートを備えたバージョンにアップグレードするか、SSLを有効にしてソースからビルドし直してください。

Postgresql-docsには、sslmodeがrequireに設定されている場合、SSLサポートがないとエラーが発生することも記載されていますverify-caまたはverify-full。参考として、sslmodeの下の here を参照してください。

postgres-website には、バイナリパッケージからpostgresをインストールするいくつかの方法がリストされているため、ニーズに合った方法を選択できます。私はOSXに慣れていないので、何がベストかについての推奨はありません。

これ の質問も役立つかもしれません。

また、psycopg2-moduleを再インストールする必要があります。再構築するときは、新しくインストールしたlibを使用してください。リンクされた質問を参照してください(つまり、pg_configの実行時に、$ PATHへの新しいインストールに含まれるpip install psycopg2へのパスを配置する必要があります)。

7
andreas-hofmann

これと同じエラーが発生しました。これは、psycopg2のAnacondaバージョンを使用していたためです。それを修正するために、私は適応しました ここからのVictorFの解決策 と実行しました:

conda uninstall psycopg2
Sudo ln -s /Users/YOURUSERNAME/anaconda/lib/libssl.1.0.0.dylib /usr/local/lib
Sudo ln -s /Users/YOURUSERNAME/anaconda/lib/libcrypto.1.0.0.dylib /usr/local/lib
pip install psycopg2

次に、conda listを実行すると、psycopg2が<pip>とともにインストールされ、右端の列に表示されます。その後、私はPythonを再起動し、すべてがうまくいきました。

6
Brideau

発生しているエラーはPostgres自体の問題であり、psycopg2ではありません。

psycopg2.OperationalError: sslmode value "require" invalid when SSL support is not compiled in

上記は、psycopg2が組み込まれているPostgresのバージョンにSSLサポートが組み込まれていないことを示しています。実行中のPosgresサーバーにssl=requireで接続しようとすると、このエラーがスローされます。

Postgresのインストール方法については触れていませんが、Homebrewを他のものに使用しているため、Postgresも同じ方法でインストールすることをお勧めします。

$ brew update
$ brew install postgresql

postgresqlの式 は、opensslに依存し、--with-opensslフラグを設定してコンパイルすることを示しています。また、必要なlibpqヘッダーもインストールします。この手順の後でpsycopg2を再インストールして、正しいライブラリ/バージョンを取得できるようにする必要がある場合があります。

興味深いことに、 condaに対してリストされたバグ があります。これは、psycopg2のc​​ondaバージョン(Homebrew postgresがインストールされているシステムにリンクされている)がインストールされていないシステムにインストールされた場合に発生する、同じエラーをリストします、SSLライブラリーが欠落していることも示唆する可能性があります。

間違ったバージョンが使用されるリスクを最小限に抑えるために、再インストールする前に既存のPostgresバージョン(Homebrew経由でインストールされたものを含む)をアンインストールすることをお勧めします。

5
mfitzp

他の人が言ったように、エラーメッセージはPostgresから来ているようです。これを確認するには、次のように入力します。_psql sslmode=require_ pgsqlターミナルが表示された場合、sslはpostgresで機能します。エラーの場合は機能しません。

Postgresを試して削除し、opensslサポートで再インストールします。

_brew uninstall postgres
brew update
brew install postgres --with-openssl
_

または、これが私が提案する方法です。 http://postgresapp.com にワンクリックインストーラーがあります。これにより、インストールも簡単になります。サイトの指示に従って、正しくインストールしてください。

Yosemiteで実行すると、〜/ Library/Application\Support/Postgres93/varにインストールされました

証明書を作成することもできます(これは、エラーが発生している場所でもある可能性があります)。これがレジストラから発行される場合は、レジストラから公開するか、開発/テスト環境の場合は自己署名する必要があります。

_openssl req -new -text -out server.req
openssl rsa -in privkey.pem -out server.key
rm privkey.pem
openssl req -x509 -in server.req -text -key server.key -out server.crt
chmod og-rwx server.key
_

Configディレクトリに移動します。デフォルトでは、〜/ Library/Application\Support/Postgres93/varです。

SSLサポートを有効にします。

_vim postgresql.conf
# change this:
# ssl = on
# to this:
ssl = on
_

アプリを再起動し、_psql "sslmode=require"_でsslを確認します

それが機能する場合は、Pythonコードで試してください。上記のコードで機能するがPythonでない場合は、間違いなくPython対処する必要があるコードの問題。

3
Logan

コメントできないので:
これは、Postgresのバージョンを変更した後でのみ機能したというブリドーの回答に追加します。

brew uninstall postgres
brew update
brew install postgres --with-openssl

次に、Brideauから提供されたコードを実行すると、機能するはずです。

1
thenaturalist

Psycopg2のv2.6.1またはv2.6.2(私のように)を使用している場合、答えはv2.7への単純なアップグレードでした。 psycopg2の リリースノート を読むと、SSLのマイナーな修正がありましたが、特に関連性があるようには見えません。

私のセットアップは次のとおりでした:

  • Mac OS X El Capitan 10.11.6
  • psycopg2 2.6.2はpipを介してインストールされます
  • Enterprise DBインストーラーを介してインストールされたPostgreSQL

ランニング pip uninstall psycopg2 に続く pip install psycopg2解決された問題。

0
Andy G