Reinstallazione del ricciolo
Ho provato ogni suggerimento da questa discussione ma nessuno ha funzionato per me. Come soluzione ho reinstallato curl e curlib. Dopo di che sono stato in grado di installare pycurl con il supporto ssl all'interno dell'ambiente.
All'inizio:
"PycURL / 7.43.0 libcurl / 7.47.0 GnuTLS / 3.4.10 zlib / 1.2.8 libidn / 1.32 librtmp / 2.3"
Parte 1: re / installazione con pip
Per prima cosa ho rimosso pycurl da virtualenv usando pip come suggerito nelle risposte precedenti:
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=openssl
pip install pycurl --global-option="--with-openssl"
L'idea qui è che il pacchetto è stato memorizzato nella cache e lo abbiamo semplicemente reinstallato con l'opzione openssl.
Ho anche provato a ricompilare pycurl con pip usando:
pip install pycurl --compile pycurl --no-cache
..ma ha avuto lo stesso errore dopo l'esecuzione:
python
import pycurl
pycurl.version
ImportError: pycurl: libcurl link-time ssl backend ( gnutls ) è diverso dal backend ssl in fase di compilazione ( openssl )
Parte 2. Installazione da tar
Dopo che il metodo precedente non ha funzionato, ho deciso di installare pycurl da tar con:
curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz
sudo tar -xzvf pycurl-7.43.0.tar.gz
cd pycurl-7.43.0/
sudo python setup.py --with-ssl install
Ha installato pycurl a livello globale ma non all'interno di virtualenv. Inoltre non ho controllato se fosse installato con il supporto SSL o meno, ma penso che sia ancora senza ssl.
Parte 3. Reinstallazione di curl e curllib
Finalmente ho capito che pycurl non si installa normalmente nell'ambiente perché global curl e libcurl sono compilati con gnutls.
Prima di iniziare verificalo con:
curl-config --configure
Una delle linee di output sarà
'--without-ssl' '--with-gnutls'
Per ricompilarlo:
In primo luogo rimuovere il ricciolo:
sudo apt-get purge curl
Installa tutte le dipendenze di compilazione necessarie per curl
sudo apt-get build-dep curl
Scarica l'ultima versione (al 20 dicembre 2016) libcurl
mkdir ~/curl
wget http://curl.haxx.se/download/curl-7.51.0.tar.bz2
tar -xvjf curl-7.51.0.tar.bz2
cd curl-7.51.0
I soliti passaggi per creare un'app dalla sorgente
./configure
./make
sudo make install
Se openssl è installato correttamente, configure lo troverà automaticamente. L'output sarà:
curl versione: 7.51.0
Configurazione host: x86_64-pc-linux-gnu
Prefisso installazione: / usr / local
Compilatore: gcc
SSL supporto: abilitato (OpenSSL) ...
Risolvi eventuali problemi relativi alle cache di posizione della libreria di livello C ("cache della libreria condivisa")
sudo ldconfig
Ora prova a reinstallare pycurl nell'ambiente:
curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz
pip install pycurl-7.43.0.tar.gz --global-option="--with-openssl"
Il risultato dovrebbe essere:
python
import pycurl
pycurl.version
"PycURL / 7.43.0 libcurl / 7.51.0 OpenSSL / 1.0.2g zlib / 1.2.8 librtmp / 2.3"