pip3 installs inside virtual environment with python3.6 failing due to ssl module not available

前端 未结 6 1958
無奈伤痛
無奈伤痛 2020-11-29 23:01

(py36venv) vagrant@pvagrant-dev-vm:/vagrant/venvs$ pip3 install pep8

pip is configured with locations that require TLS/SSL, h

相关标签:
6条回答
  • 2020-11-29 23:26

    I ran into the same error when building Python 3.6.1 from source under CentOS 7. For CentOS7, I had to first:

    sudo yum install openssl-dev
    

    Then:

    ./configure --enable-optimizations
    make altinstall
    

    Now pip3.6 works :-)

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

    I stumbled upon the same issue when I tried to create a virtual environment utilising python3.6.0. Here is my solution for Mac OS X 10.12.2 (Py_minion comment was pretty close):

    Setup

    I created the environment by the following steps: downloading python3.6.0 running

    ./configure --prefix=<some_path>`
    make
    make install
    mkvirtualenv --python=<some_path/bin/python3.6> foo
    

    So basically similar to: https://stackoverflow.com/a/11301911/1286093

    An indication if you have the same issue as I had would be a similar line when running make

    The necessary bits to build these optional modules were not found: _ssl
    

    Solution

    Install openssl

    brew install openssl
    brew unlink openssl && brew link openssl --force
    

    Change Module/Setup or Module/Setup.dist

    You can find those files in the directory of the downloaded Python version.

    Comment in and, if necessary change, lines 209 - 211 (I had to change the SSL variable to my openssl location).

    SSL=/usr/local/opt/openssl <---- THIS DEPENDS ON YOUR INSTALLATION
    _ssl _ssl.c \
        -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
        -L$(SSL)/lib -lssl -lcrypto
    

    Given that this was the location of openssl

    Set environment variables

    export CFLAGS="-I$(brew --prefix openssl)/include"
    export LDFLAGS="-L$(brew --prefix openssl)/lib"
    

    make and install again

    Running

    ./configure --prefix=<some_path>`
    make
    make install
    mkvirtualenv --python=<some_path/bin/python3.6> foo
    

    again did the trick for me

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

    I followed the below steps for python3.6 installation in ubuntu 14.04 and virtualenv pip installs works fine.

    Python 3.6 Installation:

    sudo apt-get install python3-dev libffi-dev libssl-dev
    wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz  
    tar xvf Python-3.6.0.tgz
    cd Python-3.6.0
    ./configure --enable-optimizations  
    make -j8  
    sudo make altinstall
    python3.6
    

    If seeing the following error --

    zipimport.ZipImportError: can't decompress data; zlib not available make: *** [altinstall] Error 1

    try:

    sudo apt-get install zlib1g-dev
    

    Validation:

    Create virtualenv in python3.6:

    python3.6 -m venv testenv
    source testenv/bin/activate
    pip install pep8
    

    using pip:

    (testenv) vagrant@pvagrant-dev-vm:~$ pip install pep8
    *Collecting pep8
      Downloading pep8-1.7.0-py2.py3-none-any.whl (41kB)
        100% |████████████████████████████████| 51kB 4.1MB/s
    Installing collected packages: pep8
    Successfully installed pep8-1.7.0*
    
    (testenv) vagrant@pvagrant-dev-vm:~$ pip list
    
    pep8 (1.7.0) 
    pip (9.0.1)
    setuptools (28.8.0)
    
    0 讨论(0)
  • 2020-11-29 23:38

    I have solved this problem on Ubuntu-16.04.1. First you need to install necessary libraries. To install open Terminal (Ctrl+Alt+T), then type;

     sudo apt-get install build-essential checkinstall
     sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
    

    After that go the directory where your python file is then reconfigure and reinstall python3.6 .

     cd /opt/Python3.6/
    ./configure
     make 
    sudo make install
    

    NOTE
    If you installed Python3.6 via ppa, then reinstall it again;

    sudo apt-get install python3.6
    

    Now you should be able to use pip3.6

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

    Running make reported to me in the shell output:

    The necessary bits to build these optional modules were not found:
    _bz2                  _dbm                  _gdbm              
    _sqlite3              _ssl                  _tkinter           
    To find the necessary bits, look in setup.py in detect_modules() for the module's name.
    

    What solved the problem in my case (Linux Mint 18.1, openssl already installed) was editing the setup.py in the Python-3.6.0 folder adding there the path to where the openssl installation put the ssl.h file on my system into ( /usr/include/openssl/ssl.h ). Here the section in which I have added the line '/usr/include':

        # Detect SSL support for the socket module (via _ssl)
        search_for_ssl_incs_in = [
                              '/usr/local/ssl/include/',
                              '/usr/contrib/ssl/include/',
                              '/usr/include/'
                             ]
        ssl_incs = find_file('openssl/ssl.h', inc_dirs,
                             search_for_ssl_incs_in
                             )
    
    0 讨论(0)
  • 2020-11-29 23:45

    A complete script can be found HERE

    Install Prerequisites

    For RHEL/CentOS

    sudo yum -y install gcc gcc-c++ zlib zlib-devel libffi-devel openssl-devel wget

    For Ubuntu/Debian

    sudo apt-get -y install build-essential python-dev python-setuptools python-pip python-smbus libncursesw5-dev libgdbm-dev libc6-dev zlib1g-dev libsqlite3-dev tk-dev libssl-dev openssl libffi-dev wget

    Download Python

    Modify for the version of python you want

    Python Versions

    cd /var/tmp sudo wget https://www.python.org/ftp/python/3.x.x/Python-x.x.x.tgz sudo tar xf Python-3.*.tgz cd Python-3*

    Configure/Make/Install

    sudo ./configure --enable-optimizations --enable-shared --prefix=/usr/local sudo make && make altinstall

    Cleanup Shared Library & Add to Path

    Stripping the shared library of debugging symbols can speed up execution when running parallel scripts.

    sudo make && make altinstall sudo strip /usr/local/lib/libpython3.7m.so.1.0 sudo echo 'export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib' >> /etc/profile.d/python.sh sudo echo 'export PATH=${PATH}:~/usr/local/bin/' >> /etc/profile.d/python.sh sudo echo '/usr/local/lib' >> /etc/ld.so.conf sudo ldconfig

    Reference

    • Gist
    • Stack Overflow
    • Stack Overflow
    • Daniel Erikson
    • Unix StackExchange
    • TLDP
    0 讨论(0)
提交回复
热议问题