ignoring ensurepip failure pip requires ssl/tls error in Ubuntu 18.04

后端 未结 2 756
野的像风
野的像风 2021-01-13 07:01

Getting ignoring ensurepip failure pip requires ssl/tls error when trying to install python and pip in Ubuntu 18.04

Trying to run <

相关标签:
2条回答
  • 2021-01-13 07:27

    This is a python compilation issue that has been fixed as of Python 3.4.5. Best practice would be to upgrade to 3.4.5 and follow the compilation steps again.

    For those coming here for Python <3.5.3 with the same issue, this same issue has been fixed as of 3.5.3 (see here).

    I am not sure if other Python versions are affected, but have seen in the Patch notes that in later versions also a fix was made for Windows and MacOSX. Please check the change log for the Python major version you are using to see which fix applies to you. the change logs can be found here: (Python 3.4, Python 3.5)

    0 讨论(0)
  • 2021-01-13 07:39

    This is due to Debian 9 using OpenSSL 1.1.0., However, OpenSSL 1.1.0 support in the SSL module was only added to Python 2.7.13, 3.5.3 and 3.6+ Thus, it makes the python under those versions cannot be correctly linked to ssl library. Issues https://github.com/pyenv/pyenv/issues/945 So you have to manually add those libraries when you are compiling them.

    My suggestion

    Since your system is already compiled with the default python, unintentionally compiled different version of python into global executable may cause many hidden problems, especially some commands used behind on system-default python.

    So why not you use pyenv, to control those version of pythons? pyenv is like a python-version control programs, it uses shims, through a process called rehashing, pyenv maintains shims in that directory to match every Python command across every installed version of python, pip, and so on. For more documents, please reading: https://github.com/pyenv/pyenv. To install pyenv, please following the provided reference.

    Solution

    After many hours struggling, I finally found a solution to perfectly solve those version of pythons confliction problems, copy and paste the following script to a new file, and make it executable, then you can compile and install those pythons. While if you want to install them in other way, say, without using pyenv, please change the last second line commands to fit your needs.

    #!/bin/bash -e
    
    # Note: it is a script to solve Ubuntu 18.04 LTS 
    #       different version of pythons compiling
    #       header confliction problems
    #
    # The idea is got from @JustAnotherArivist
    # From URL: https://github.com/pyenv/pyenv/issues/945
    #
    # The script used in here is with slightly modifications
    # to fit many different SSL header versions
    
    
    # First under your home directory make OpenSSL library
    # and extract useful package
    
    mkdir ~/libssl1.0-dev
    cd ~/libssl1.0-dev
    apt-get download libssl1.0-dev
    ar x libssl1.0-dev* data.tar.xz
    tar -xf data.tar.xz --strip-components=2
    
    
    # Second, specifically get your current system's SSL headers
    # and make symbolic-links
    
    libcrypto=$(ls /usr/lib/x86_64-linux-gnu/ | grep libcrypto.so......)
    libssl=$(ls /usr/lib/x86_64-linux-gnu/ | grep libssl.so......)
    
    ln -s /usr/lib/x86_64-linux-gnu/${libcrypto} ~/libssl1.0-dev/lib/x86_64-linux-gnu
    ln -s /usr/lib/x86_64-linux-gnu/${libssl} ~/libssl1.0-dev/lib/x86_64-linux-gnu
    
    
    # Set your CFLAGS LDFLAGS compile options
    # And use pyenv install the python version <3.4.5 or <3.5.3
    
    # Note: it is a one line command
    # Please change the version of python that you want to compile
    CFLAGS="-I${HOME}/libssl1.0-dev/include -I${HOME}/libssl1.0-dev/include/x86_64-linux-gnu" \
    LDFLAGS="-L${HOME}/libssl1.0-dev/lib/x86_64-linux-gnu" \
    pyenv install 3.4.2
    
    
    # Remove tempor libssl1.0-dev direcotory
    rm -rf ~/libssl1.0-dev
    
    0 讨论(0)
提交回复
热议问题