当前位置:  开发笔记 > 编程语言 > 正文

Psycopg2 Python SSL支持未编译

如何解决《Psycopg2PythonSSL支持未编译》经验,为你挑选了3个好方法。

我正在尝试使用psycopg2与sslmode ='required'参数连接到我的postgres数据库; 但是,我收到以下错误

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

这是关于我的系统的几个细节

Mac OS X El Capitan

Python 2.7

通过pip安装psycopg2

通过自制软件安装python

这是我试图解决问题的方法

brew uninstall python

which python仍然显示python生活在/usr/local/bin/python,试图卸载这个但不能.并且听说这是操作系统使用的python,不管怎么说都不应该卸载

brew install python --with-brewed-openssl --build-from-source

pip uninstall psycopg2

pip install psycopg2

完成所有这些后,异常仍然发生.我通过运行这个python脚本#!/usr/bin/env python不知道它的问题,但是这是一个不同的目录比一个which python节目



1> andreas-hofm..:

由于您是通过pip安装的,因此您应该使用最新版本的psycopg2(2.6.1).在对代码进行了一些挖掘之后,看起来异常是在connection_int.c中抛出的,它直接调用postgresql -c-libraries来设置db-connection.这样的调用就像这样:

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;
}

在您的connect语句中指定给psycopg2.connect()的关键字正在处理该函数,并且错误将作为OperationalError异常返回.

该错误实际上是直接在postgresql-lib中生成的 - 您可能想要检查您正在使用哪个版本,如何构建它,如果可能,请将其升级到支持SSL的版本,或者在启用SSL的情况下从源重建它.

postgresql-docs还声明如果sslmode设置为require,verify-caverify-full,则缺少SSL支持将引发错误.请参阅此处以sslmode供参考.

在Postgres的-网站列出了几种方法来安装从二进制包Postgres的,所以你可以选择一个适合您的需求.我不熟悉OSX,所以我没有推荐什么是最好的.

这个问题也可能有所帮助.

您还需要重新安装psycopg2模块,确保在重建时使用新安装的lib.请参阅链接的问题(简而言之,您需要pg_config在运行时将新安装中包含的路径放置到$ PATH pip install psycopg2).



2> Brideau..:

我有同样的错误,原来是因为我使用的是anaconda版本的psycopg2.为了解决这个问题,我从这里开始调整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 .之后,我刚刚重启Python,一切正常.



3> mfitzp..:

您收到的错误是由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在系统上安装了带有Homebrew postgres的系统的conda版本时报告的相同错误,表明缺少SSL库也可以触发此错误.

我建议在重新安装之前卸载任何现有的Postgres版本(包括通过Homebrew安装的任何版本),以最大限度地降低使用错误的风险.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有