如何在aws ec2中安装带有nss后端的libcurl?(Python 3.6 64位Amazon Linux)
我在AWS中有一个运行Python3.6(Amazon Linux/2.8.3)的ec2实例,我需要安装带有NSS ssl后端的pycurl 首先,我尝试将如何在aws ec2中安装带有nss后端的libcurl?(Python 3.6 64位Amazon Linux),python,amazon-web-services,amazon-ec2,libcurl,pycurl,Python,Amazon Web Services,Amazon Ec2,Libcurl,Pycurl,我在AWS中有一个运行Python3.6(Amazon Linux/2.8.3)的ec2实例,我需要安装带有NSS ssl后端的pycurl 首先,我尝试将pycurl==7.43.0--global option=“--with nss”添加到我的requirement.txt文件中,但安装错误。因此,我最终在.ebextensions中添加了一个.config文件(在部署期间运行): Pycurl似乎安装正确,但芹菜工人没有运行。芹菜工人日志显示: __main__.Configurati
pycurl==7.43.0--global option=“--with nss”
添加到我的requirement.txt
文件中,但安装错误。因此,我最终在.ebextensions
中添加了一个.config
文件(在部署期间运行):
Pycurl似乎安装正确,但芹菜工人没有运行。芹菜工人日志显示:
__main__.ConfigurationError: Could not run curl-config: [Errno 2] No such file or directory
如果我使用ssh连接到实例并运行python 3.6-c“import pycurl”我会得到一个更详细的错误:
ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (nss)
所以我想我的问题是我以前用openSSL而不是NSS安装了libcurl,因此libcurl和pycurl之间不匹配
根据另一个stackoverflow问题,对于要与NSS后端一起安装的libcurl,我应该与以下一起安装:
sudo apt libcurl4-nss-dev
但是由于服务器运行的是AmazonLinux,我不能使用apt
命令。因此,我改为:
yum install libcurl-devel
我想这就是问题所在:当我需要NSS支持时,它会安装带有OpenSSL支持的libcurl
如何在Amazon Linux中安装带有NSS的libcurl???(我需要NSS,因为我正在运行一个带有芹菜的Django应用程序,使用SQS作为代理,而SQS需要NSS)
多谢各位 我刚刚遇到了同样的问题,并设法解决了:)
libcurl
的Amazon Linux配置选项:libcurl
相同的功能,则必须保留其他选项。当然,--带ssl
将被--不带ssl--带nss
替换
1.1安装先决条件:
sudo yum install libssh2-devel nss-devel
(当然,您应该将其添加到ebextensions的包yum
部分)
从源代码处编译libcurl
(我选择7.61.1以匹配Amazon Linux 2018.03使用的版本):
(当然,这应该通过ebextensions的文件
部分作为Shell脚本正确部署)
现在您应该看到在/usr/local/lib
中创建的libcurl.so.4
为要使用自定义libcurl
编译的pycurl
定义以下环境变量:
运行您的pip安装
您可以选中链接到右侧libcurl
的pycurl
:
ldd /opt/python/run/venv/local/lib64/python3.6/site-packages/pycurl.cpython-36m-x86_64-linux-gnu.so
应该向您显示libcurl.so.4=>/usr/local/lib64/libcurl.so.4
当然python3.6-c'importpycurl'
应该可以工作
就这样!您应该能够使用SQS运行芹菜。在我的python ec2实例上安装pycurl时遇到了很多问题-首先,pip根本不会安装pycurl。必须ssh并运行
yum install libcurl-devel
在此之后,我更新了requirement.txt文件,将相关的ssl选项(--with openssl)作为安装选项
pycurl==7.43.0.5 --install-option="--with-openssl"
一旦我在requirement.txt中部署了一个带有此更改的新版本,pycurl就工作得很好,我用它进行了测试
python 'import pycurl'
我从错误消息中知道我需要使用openssl
libcurl链接时间ssl后端(openssl)
我的堆栈与您的几乎相同(从其他问题中看到):Django/SQS/芹菜/豆茎。我让它运行起来,pycurl也有问题,但我使用的是openssl。我不认为SQS需要nss,至少对我来说openssl在AmazonLinux2.8.6上与Python3.6配合得很好。我不知道为什么我认为SQS需要nss。无论如何谢谢你!
ldd /opt/python/run/venv/local/lib64/python3.6/site-packages/pycurl.cpython-36m-x86_64-linux-gnu.so
yum install libcurl-devel
pycurl==7.43.0.5 --install-option="--with-openssl"
python 'import pycurl'