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

时间:2014-01-31 18:20:41

标签: python easy-install pycurl

开始提供一些信息:

  • 我正在运行Mac OS 10.7.5
  • 我安装了卷曲7.21.4(我相信使用开发工具)
  • 我有python 2.7.1

我一直在尝试安装pycurl,但每次尝试运行它都会得到:

ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)

我首先使用setup:

安装了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之后,easy install会打印此消息:

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安装的事实......

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

6 个答案:

答案 0 :(得分:13)

我必须在CentOS 7上使用以下内容:

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

不需要uninstall或设置PYCURL_SSL_LIBRARY。一切都融入了这一行。

答案 1 :(得分:11)

当你得到:
failed: ImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (none/other)

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

似乎pip在某处下载了这些东西,编译它然后把它放在python可以使用它的地方。 如果你在缓存中有编译版本,你就会被搞砸,因为它不会重新编译。无论PYCURL_SSL_LIBRARY变量是什么,它都“赋予”python相同的东西。

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

升级到最新的点子:
pip install --upgrade pip #Healthy anyway

删除当前的pycurl:
pip uninstall pycurl

根据需要设置PYCURL_SSL_LIBRARY:
export PYCURL_SSL_LIBRARY=nss #For me this was the required setting

最后运行
pip install --compile pycurl

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

答案 2 :(得分:0)

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

还可以尝试pycurl的最后一个版本,它可以开箱即用。

答案 3 :(得分:0)

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

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

这将强制完成编译。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

假设您已通过自制软件安装openssl,请检查brew info openssl。您可能需要通过env-vars包含一些编译标志来使用它,就像许多“keg-only”库一样。