SSL backend error when using OpenSSL

前端 未结 26 2304
北恋
北恋 2020-11-30 22:38

I was trying to install pycurl in a virtualenv using pip and I got this error

ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from         


        
相关标签:
26条回答
  • 2020-11-30 23:25

    The method to fix the pycurl after Mac OS High Sierra update:

    1. Reinstall the curl libraries to use OpenSSL instead of SecureTransport

      brew install curl --with-openssl
      
    2. Install pycurl with correct build-time environment and paths

      export PYCURL_SSL_LIBRARY=openssl
      pip uninstall pycurl 
      pip install --no-cache-dir --global-option=build_ext --global-option="-L/usr/local/opt/openssl/lib" --global-option="-I/usr/local/opt/openssl/include" --user pycurl
      
    0 讨论(0)
  • 2020-11-30 23:26

    I had this problem for days. Finally with the help of other answers here (mainly Alexander Tyapkov's) I got it working for AWS Elastic Beanstalk.

    Manual install (connecting with SSH):

    sudo pip uninstall pycurl
    curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz
    sudo pip install pycurl-7.43.0.tar.gz --global-option="--with-nss"
    

    IMPORTANT: Please note that you have to make sure you are using the currect version of Python and PIP, otherwise you might be compiling it for Python 2.x and using v3.x.

    Auto-install in Elastic Beanstalk:

    files:
      "/usr/local/share/pycurl-7.43.0.tar.gz" :
        mode: "000644"
        owner: root
        group: root
        source: https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz
    
    commands:
      01_download_pip3:
        # run this before PIP installs requirements as it needs to be compiled with OpenSSL
        command: 'curl -O https://bootstrap.pypa.io/get-pip.py'
      02_install_pip3:
        # run this before PIP installs requirements as it needs to be compiled with OpenSSL
        command: 'python3 get-pip.py'
      03_pycurl_uninstall:
        # run this before PIP installs requirements as it needs to be compiled with OpenSSL
        command: '/usr/bin/yes | sudo pip uninstall pycurl'
      04_pycurl_download:
        # run this before PIP installs requirements as it needs to be compiled with OpenSSL
        command: 'curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz'
      05_pycurl_reinstall:
        # run this before PIP installs requirements as it needs to be compiled with OpenSSL
        command: 'sudo pip install pycurl-7.43.0.tar.gz --global-option="--with-nss"'
    
    container_commands:
      09_pycurl_reinstall:
        # run this before PIP installs requirements as it needs to be compiled with OpenSSL
        # the upgrade option is because it will run after PIP installs the requirements.txt file.
        # and it needs to be done with the virtual-env activated
        command: 'source /opt/python/run/venv/bin/activate && pip3 install /usr/local/share/pycurl-7.43.0.tar.gz --global-option="--with-nss" --upgrade'
    

    I had this problem because I was trying to configure Celery 4 with Django 1.10 in Elastic Beanstalk. If that's your case, I wrote a full blog post about it.

    0 讨论(0)
  • 2020-11-30 23:28

    For anyone having problem inside PyCharm CE on macOS Mojave this is how i got it working in venv:

    • specify version: 7.43.0.1
    • Options: --install-option=--with-openssl --install-option=--openssl-dir=/usr/local/opt/openssl

    0 讨论(0)
  • 2020-11-30 23:29

    For python 2.7

    sudo apt-get install build-essential libssl-dev libffi-dev python-dev
    

    For python 3.5 also install the next:

    sudo apt-get install python3.5-dev
    

    Download the latest pycurl-7.43.0.tar.gz (md5) Source from pypi https://pypi.python.org/pypi/pycurl/7.43.0#downloads and run the next command:

    python setup.py --with-openssl install
    

    Also you can do it into python environment:

    (test_env)user@pc:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install
    
    0 讨论(0)
  • 2020-11-30 23:32

    After reading their INSTALLATION file, I was able to solve my problem by setting an environment variable and did a reinstall

    • remove existing pycurl installation

      pip uninstall pycurl

    • export variable with your link-time ssl backend (which is openssl above)

      export PYCURL_SSL_LIBRARY=openssl

    • then, re-install pycurl with no cache

      pip install pycurl --no-cache-dir

    There could be other solution out there but this works perfectly for me on a virtualenv and pip installation.

    0 讨论(0)
  • 2020-11-30 23:32
    export CPPFLAGS=-I/usr/local/opt/openssl/include
    export LDFLAGS=-L/usr/local/opt/openssl/lib
    
    pip install pycurl --global-option="--with-openssl"
    
    0 讨论(0)
提交回复
热议问题