Skip to content

How to upgrade pip on Debian Wheezy


Debian Wheezy provides an ancient version of pip utility for installing Python packages. To put it very simply, it does not work anymore as it is not using HTTPS protocol, but fortunately this issue can be quickly fixed.

Debian version.

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.11 (wheezy)
Release:	7.11
Codename:	wheezy

Python version (unfortunatelly Debian Wheezy does not provide at least 2.7.9 version).

$ python --version
Python 2.7.3

Install python-pip package. alternatively you can use get-pip.py Python script to install pip and downgrade it afterwards.

$ sudo apt-get install python-pip
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  binutils build-essential bzip2 cpp cpp-4.7 dpkg-dev fakeroot file g++ g++-4.7 gcc gcc-4.7 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libc-dev-bin libc6-dev
  libclass-isa-perl libdpkg-perl libexpat1 libfile-fcntllock-perl libgdbm3 libgmp10 libgomp1 libitm1 libmagic1 libmpc2 libmpfr4 libquadmath0 libsqlite3-0 libstdc++6-4.7-dev libswitch-perl
  libtimedate-perl linux-libc-dev make manpages manpages-dev mime-support patch perl perl-modules python python-minimal python-pkg-resources python-setuptools python2.6 python2.6-minimal
  python2.7 python2.7-minimal
Suggested packages:
  binutils-doc bzip2-doc cpp-doc gcc-4.7-locales debian-keyring g++-multilib g++-4.7-multilib gcc-4.7-doc libstdc++6-4.7-dbg gcc-multilib autoconf automake1.9 libtool flex bison gdb gcc-doc
  gcc-4.7-multilib libmudflap0-4.7-dev libgcc1-dbg libgomp1-dbg libitm1-dbg libquadmath0-dbg libmudflap0-dbg libcloog-ppl0 libppl-c2 libppl7 binutils-gold glibc-doc libstdc++6-4.7-doc
  make-doc man-browser ed diffutils-doc perl-doc libterm-readline-gnu-perl libterm-readline-perl-perl libpod-plainer-perl python-doc python-tk python-distribute python-distribute-doc
  python2.6-doc binfmt-support python2.7-doc
Recommended packages:
  python-dev-all
The following NEW packages will be installed:
  binutils build-essential bzip2 cpp cpp-4.7 dpkg-dev fakeroot file g++ g++-4.7 gcc gcc-4.7 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libc-dev-bin libc6-dev
  libclass-isa-perl libdpkg-perl libexpat1 libfile-fcntllock-perl libgdbm3 libgmp10 libgomp1 libitm1 libmagic1 libmpc2 libmpfr4 libquadmath0 libsqlite3-0 libstdc++6-4.7-dev libswitch-perl
  libtimedate-perl linux-libc-dev make manpages manpages-dev mime-support patch perl perl-modules python python-minimal python-pip python-pkg-resources python-setuptools python2.6
  python2.6-minimal python2.7 python2.7-minimal
0 upgraded, 50 newly installed, 0 to remove and 0 not upgraded.
Need to get 57.0 MB of archives.
After this operation, 165 MB of additional disk space will be used.
Do you want to continue [Y/n]?
[...]
Setting up python-setuptools (0.6.24-1) ...
Setting up python-pip (1.1-3) ...
Setting up libswitch-perl (2.16-2) ...
Setting up perl-modules (5.14.2-21+deb7u5) ...
Setting up perl (5.14.2-21+deb7u5) ...
update-alternatives: using /usr/bin/prename to provide /usr/bin/rename (rename) in auto mode
Setting up libstdc++6-4.7-dev (4.7.2-5) ...
Setting up g++-4.7 (4.7.2-5) ...
Setting up g++ (4:4.7.2-1) ...
update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode
Setting up libtimedate-perl (1.2000-1) ...
Setting up libdpkg-perl (1.16.18) ...
Setting up dpkg-dev (1.16.18) ...
Setting up build-essential (11.5) ...
Setting up libalgorithm-diff-perl (1.19.02-2) ...
Setting up libalgorithm-diff-xs-perl (0.04-2+b1) ...
Setting up libalgorithm-merge-perl (0.08-2) ...
Setting up libfile-fcntllock-perl (0.14-2) ...

pip version (using python-pip package).

$ pip --version
pip 1.1 from /usr/lib/python2.7/dist-packages (python 2.7)

pip will not download any packackages anymore or upgrade itself.

$ sudo pip install beautifulsoup4
pip 1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
milosz@debian:~$ sudo pip install beautifulsoup4
Downloading/unpacking beautifulsoup4
  Cannot fetch index base URL http://pypi.python.org/simple/
  Could not find any downloads that satisfy the requirement beautifulsoup4
No distributions at all found for beautifulsoup4
Storing complete log in /root/.pip/pip.log

The main problem is that it does not use HTTPS protocol.

$ sudo cat /root/.pip/pip.log
Downloading/unpacking beautifulsoup4

  Getting page http://pypi.python.org/simple/beautifulsoup4
  Could not fetch URL http://pypi.python.org/simple/beautifulsoup4: HTTP Error 403: SSL is required
  Will skip URL http://pypi.python.org/simple/beautifulsoup4 when looking for download links for beautifulsoup4
  Getting page http://pypi.python.org/simple/
  Could not fetch URL http://pypi.python.org/simple/: HTTP Error 403: SSL is required
  Will skip URL http://pypi.python.org/simple/ when looking for download links for beautifulsoup4
  Cannot fetch index base URL http://pypi.python.org/simple/

  URLs to search for versions for beautifulsoup4:
  * http://pypi.python.org/simple/beautifulsoup4/
  Getting page http://pypi.python.org/simple/beautifulsoup4/
  Could not fetch URL http://pypi.python.org/simple/beautifulsoup4/: HTTP Error 403: SSL is required
  Will skip URL http://pypi.python.org/simple/beautifulsoup4/ when looking for download links for beautifulsoup4
  Could not find any downloads that satisfy the requirement beautifulsoup4

No distributions at all found for beautifulsoup4

Exception information:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 104, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 245, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 978, in prepare_files
    url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 157, in find_requirement
    raise DistributionNotFound('No distributions at all found for %s' % req)
DistributionNotFound: No distributions at all found for beautifulsoup4

Provide package index URL using HTTPS protocol to upgrade pip to version 8.1.2.

$ sudo pip install --upgrade --index-url=https://pypi.python.org/simple/ pip==8.1.2
Downloading/unpacking pip from https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9
  Downloading pip-9.0.1.tar.gz (1.2Mb): 1.2Mb downloaded
  Running setup.py egg_info for package pip
    /usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
      warnings.warn(msg)
    
    warning: no previously-included files found matching '.coveragerc'
    warning: no previously-included files found matching '.mailmap'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching '.landscape.yml'
    warning: no previously-included files found matching 'pip/_vendor/Makefile'
    warning: no previously-included files found matching 'tox.ini'
    warning: no previously-included files found matching 'dev-requirements.txt'
    warning: no previously-included files found matching 'appveyor.yml'
    no previously-included directories found matching '.github'
    no previously-included directories found matching '.travis'
    no previously-included directories found matching 'docs/_build'
    no previously-included directories found matching 'contrib'
    no previously-included directories found matching 'tasks'
    no previously-included directories found matching 'tests'
Installing collected packages: pip
  Found existing installation: pip 1.1
    Uninstalling pip:
      Successfully uninstalled pip
  Running setup.py install for pip
    /usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
      warnings.warn(msg)
    
    warning: no previously-included files found matching '.coveragerc'
    warning: no previously-included files found matching '.mailmap'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching '.landscape.yml'
    warning: no previously-included files found matching 'pip/_vendor/Makefile'
    warning: no previously-included files found matching 'tox.ini'
    warning: no previously-included files found matching 'dev-requirements.txt'
    warning: no previously-included files found matching 'appveyor.yml'
    no previously-included directories found matching '.github'
    no previously-included directories found matching '.travis'
    no previously-included directories found matching 'docs/_build'
    no previously-included directories found matching 'contrib'
    no previously-included directories found matching 'tasks'
    no previously-included directories found matching 'tests'
    Installing pip script to /usr/local/bin
    Installing pip2.7 script to /usr/local/bin
    Installing pip2 script to /usr/local/bin
Successfully installed pip
Cleaning up...

Upgraded pip version.

$ pip --version
pip 8.1.2 from /usr/local/lib/python2.7/dist-packages (python 2.7)

Install urllib3 with secure extra and ndg-httpsclient that provides enhanced HTTPS support using PyOpenSSL.

$ sudo pip install urllib3[secure] ndg-httpsclient
Collecting urllib3[secure]
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning.
  SNIMissingWarning
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Downloading urllib3-1.22-py2.py3-none-any.whl (132kB)
    100% |████████████████████████████████| 133kB 3.6MB/s
Collecting ndg-httpsclient
  Downloading ndg_httpsclient-0.4.4-py2-none-any.whl
Collecting idna>=2.0.0; python_version <= "2.7" and extra == "secure" (from urllib3[secure])
  Downloading idna-2.6-py2.py3-none-any.whl (56kB)
    100% |████████████████████████████████| 61kB 6.8MB/s
Collecting pyOpenSSL>=0.14; python_version <= "2.7" and extra == "secure" (from urllib3[secure])
  Downloading pyOpenSSL-17.5.0-py2.py3-none-any.whl (53kB)
    100% |████████████████████████████████| 61kB 6.7MB/s
Collecting cryptography>=1.3.4; python_version <= "2.7" and extra == "secure" (from urllib3[secure])
  Downloading cryptography-2.1.4-cp27-cp27mu-manylinux1_x86_64.whl (2.2MB)
    100% |████████████████████████████████| 2.2MB 495kB/s
Collecting certifi; extra == "secure" (from urllib3[secure])
  Downloading certifi-2018.1.18-py2.py3-none-any.whl (151kB)
    100% |████████████████████████████████| 153kB 5.2MB/s
Collecting ipaddress; python_version <= "2.7" and extra == "secure" (from urllib3[secure])
  Downloading ipaddress-1.0.19.tar.gz
Collecting pyasn1>=0.1.1 (from ndg-httpsclient)
  Downloading pyasn1-0.4.2-py2.py3-none-any.whl (71kB)
    100% |████████████████████████████████| 71kB 6.6MB/s
Collecting six>=1.5.2 (from pyOpenSSL>=0.14; python_version <= "2.7" and extra == "secure"->urllib3[secure])
  Downloading six-1.11.0-py2.py3-none-any.whl
Collecting asn1crypto>=0.21.0 (from cryptography>=1.3.4; python_version <= "2.7" and extra == "secure"->urllib3[secure])
  Downloading asn1crypto-0.24.0-py2.py3-none-any.whl (101kB)
    100% |████████████████████████████████| 102kB 5.9MB/s
Collecting cffi>=1.7; platform_python_implementation != "PyPy" (from cryptography>=1.3.4; python_version <= "2.7" and extra == "secure"->urllib3[secure])
  Downloading cffi-1.11.4-cp27-cp27mu-manylinux1_x86_64.whl (406kB)
    100% |████████████████████████████████| 409kB 2.4MB/s
Collecting enum34; python_version < "3" (from cryptography>=1.3.4; python_version <= "2.7" and extra == "secure"->urllib3[secure])
  Downloading enum34-1.1.6-py2-none-any.whl
Collecting pycparser (from cffi>=1.7; platform_python_implementation != "PyPy"->cryptography>=1.3.4; python_version <= "2.7" and extra == "secure"->urllib3[secure])
  Downloading pycparser-2.18.tar.gz (245kB)
    100% |████████████████████████████████| 256kB 3.9MB/s
Installing collected packages: idna, asn1crypto, pycparser, cffi, enum34, six, ipaddress, cryptography, pyOpenSSL, certifi, urllib3, pyasn1, ndg-httpsclient
  Running setup.py install for pycparser ... done
  Running setup.py install for ipaddress ... done
`zSuccessfully installed asn1crypto-0.24.0 certifi-2018.1.18 cffi-1.11.4 cryptography-2.1.4 enum34-1.1.6 idna-2.6 ipaddress-1.0.19 ndg-httpsclient-0.4.4 pyOpenSSL-17.5.0 pyasn1-0.4.2 pycparser-2.18 six-1.11.0 urllib3-1.22
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
You are using pip version 8.1.2, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

Now it will work as expected.

$ sudo pip install beautifulsoup4
Collecting beautifulsoup4
  Downloading beautifulsoup4-4.6.0-py2-none-any.whl (86kB)
    100% |████████████████████████████████| 92kB 4.6MB/s
Installing collected packages: beautifulsoup4
Successfully installed beautifulsoup4-4.6.0
You are using pip version 8.1.2, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

Problem solved.

Additional notes

Install pipdeptree to inspect Python package dependencies.

$ sudo pip install pipdeptree
Collecting pipdeptree
  Downloading pipdeptree-0.10.1-py2-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): pip>=6.0.0 in /usr/local/lib/python2.7/dist-packages (from pipdeptree)
Installing collected packages: pipdeptree
Successfully installed pipdeptree-0.10.1
You are using pip version 8.1.2, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

Inspect the following dependencies if you still see InsecurePlatformWarning and SNIMissingWarning warnings.

$ pipdeptree
beautifulsoup4==4.6.0
certifi==2018.1.18
distribute==0.6.24dev-r0
ndg-httpsclient==0.4.4
  - pyasn1 [required: >=0.1.1, installed: 0.4.2]
  - PyOpenSSL [required: Any, installed: 17.5.0]
    - cryptography [required: >=2.1.4, installed: 2.1.4]
      - asn1crypto [required: >=0.21.0, installed: 0.24.0]
      - cffi [required: >=1.7, installed: 1.11.4]
        - pycparser [required: Any, installed: 2.18]
      - enum34 [required: Any, installed: 1.1.6]
      - idna [required: >=2.1, installed: 2.6]
      - ipaddress [required: Any, installed: 1.0.19]
      - six [required: >=1.4.1, installed: 1.11.0]
    - six [required: >=1.5.2, installed: 1.11.0]
pipdeptree==0.10.1
  - pip [required: >=6.0.0, installed: 8.1.2]
setuptools==0.6rc11
urllib3==1.22

Disable pip version check if it annoys you.

$ sudo pip --disable-pip-version-check install beautifulsoup
Collecting beautifulsoup
  Downloading BeautifulSoup-3.2.1.tar.gz
Installing collected packages: beautifulsoup
  Running setup.py install for beautifulsoup ... done
Successfully installed beautifulsoup-3.2.1

Suggested reading

Leave a Reply

Your email address will not be published. Required fields are marked *