Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 设置SSL后安装pycurl时出现SSL错误_Python_Easy Install_Pycurl - Fatal编程技术网

Python 设置SSL后安装pycurl时出现SSL错误

Python 设置SSL后安装pycurl时出现SSL错误,python,easy-install,pycurl,Python,Easy Install,Pycurl,以下是一些信息: 我正在运行MacOS10.7.5 我已经安装了curl7.21.4(我相信是随开发工具一起安装的) 我有python 2.7.1 我一直在尝试安装pycurl,但每次尝试运行它时,我都会得到: ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other) 我首先使用以下设置安装pycurl: pytho

以下是一些信息:

  • 我正在运行MacOS10.7.5
  • 我已经安装了curl7.21.4(我相信是随开发工具一起安装的)
  • 我有python 2.7.1
我一直在尝试安装pycurl,但每次尝试运行它时,我都会得到:

ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)
我首先使用以下设置安装pycurl:

python setup.py install
这不起作用(因为没有配置SSL)

在尝试以下操作之前,我卸载了pycurl(
sudo rm-rf/Library/Python/2.7/site packages/pycurl*
):

export PYCURL_SSL_LIBRARY=openssl
easy-install pycurl
再次尝试之前:

python setup.py --with-ssl install
但是,我仍然会遇到与未编译ssl相同的错误。好像所有的指令都忽略了我的尝试

安装时setup.py一点也不抱怨,但在我设置PYCURL_SSL_LIBRARY env var之后,“轻松安装”会打印此消息:

src/pycurl.c:151:4: warning: #warning "libcurl was compiled with SSL support, but configure could not determine which " "library was used; thus no SSL crypto locking callbacks will be set, which may " "cause random crashes on SSL requests"
这似乎表明它完全忽略了我刚才告诉它使用openssl安装的事实

设置中是否缺少一些内容?

您还需要用于openssl的“开发工具”(标题/库)

还可以尝试pycurl的上一个版本,它可能是开箱即用的。

当您得到:
失败:ImportError:pycurl:libcurl链接时ssl后端(nss)不同于编译时ssl后端(无/其他)

您需要在正确设置pycurl_SSL_库的情况下重新编译pycurl。 重新安装过程似乎分为两个阶段

似乎pip在某个地方下载了这些东西,对其进行编译,然后将其放在python可以使用的地方。 如果缓存中有编译后的版本,则实际上是错误的,因为它不会重新编译。不管PYCURL\u SSL\u库变量中有什么,它都“给”python同样的东西

解决方案非常简单,擦除缓存以强制其重新编译。根据您的操作系统,缓存可能位于多个位置。您可以使用setup.py来搜索它。它包含PACKAGE=“pycurl”字符串。但是没有必要这么麻烦。最新的pip版本支持安装--编译选项

升级至最新的pip:
pip安装——升级pip#无论如何都是健康的

使用以下命令删除当前pycurl:
pip卸载pycurl

根据需要设置PYCURL\u SSL\u库:
export PYCURL_SSL_LIBRARY=nss#对我来说,这是必需的设置

最后运行
pip安装——编译pycurl


请注意,对于编译过程中所需的各种头文件,您可能需要一些-devel包。

要对@Andrei给出的正确答案添加一点更新,我想说最后一个命令需要通过向pip install添加no cache dir来强制执行redownload和setup

pip install --no-cache-dir --compile pycurl

这将强制完成编译。

我不得不在CentOS 7上使用以下命令:

sudo-pip-install--no-cache-dir--compile--ignore-installed--install option=“--with-nss”pycurl

无需
卸载
或设置
PYCURL\u SSL\u库
。所有的东西都放在那一行中。

对于mac sudo pip install--no cache dir--compile--ignore installed--install option=“--with openssl”pycurl
谢谢

假设您已经通过自制安装了openssl,请检查
brew信息openssl
。您可能需要通过env vars包含一些编译标志才能使用它,就像许多“仅限桶”lib一样。

公认的答案并没有为我解决问题,您的答案解决了问题。谢谢我也是。运行RHEL7并需要运行相同的命令。建议的解决方案在安装时没有重新编译,因此PYCURL_SSL_库值似乎被忽略,以下内容也可以使用:
\export PYCURL_SSL_LIBRARY=nss
\pip install--no cache dir--compile PYCURL
此解决方案在所有情况下都不起作用。添加
--no cache dir
以适合我的方式编译了它
#pip安装--无缓存目录--编译pycurl
我得到了
pycurl:libcurl链接时ssl后端(openssl)不同于编译时ssl后端(无/其他)
尽管我已经完成了所有步骤,甚至使用brew重新安装了openssl并尝试了--无缓存目录。这让我发疯了,我似乎需要这个额外的选项(可能是macOS Catalina上的附加--install选项=“--with openssl”)