开始提供一些信息:
我一直在尝试安装pycurl,但每次尝试运行它都会得到:
ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)
我首先使用setup:
安装了pycurlpython 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安装的事实......
设置中是否缺少某些内容?
答案 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”库一样。