42

I am interrested in knowing the recommended way to install pip3 for python3.6 (as of today, may 2018) on current version of centos7 (7.5.1804) and the accepted answer of How to install pip in CentOS 7? seems to be outdated because:

yum search -v pip

outputs (among other things):

python2-pip.noarch : A tool for installing and managing Python 2 packages
Repo        : epel

python34-pip.noarch : A tool for installing and managing Python3 packages
Repo        : epel

and python34-pip seems to be a (newer?) simpler way than the accepted answer of How to install pip in CentOS 7? :

sudo yum install python34-setuptools

sudo easy_install-3.4 pip

But since the versions of python installed on my machine are 2.7.5 and 3.6.3 why is it python34-pip and not python36-pip ? Is pip the same for 3.4+ (up to current 3.6.3) ?

shrimpdrake
  • 1,476
  • 2
  • 14
  • 25
  • 1
    See also: [EPEL Python 3.6 with pip on CentOS 7](https://cjsawer.whitewillow.co.uk/2018/08/29/epel-python-3-6-with-pip-on-centos-7/) – phoenix Apr 03 '19 at 10:54

8 Answers8

53
  1. Is pip the same for 3.4+

    No, it's not. A single pip installation serves a single Python distribution (pip2.7/pip3.4/pip3.5 etc).

  2. Since Python 3.5, pip is already bundled with the python distribution, so you can just run python3.6 -m pip instead of pip.

  3. Python 3.6 is not available in CentOS 7 vanilla repo. I usually resort to IUS repo when needing to install a fresh Python on CentOS. It always has the most recent Python version, the current one being 3.6.5. It also offers a correspondent pip package.

    $ yum install https://centos7.iuscommunity.org/ius-release.rpm
    $ yum install python36u python36u-devel python36u-pip
    

    Unfortunately, IUS doesn't offer a package for Python 3.7 yet so if you are looking for Python 3.7 on CentOS 7, building from source is your only option.

Edit: when yum is not an option

You should prefer the bootstrapping solution described in this answer as it is the most reliable way to get a working pip installed.

hoefling
  • 59,418
  • 12
  • 147
  • 194
  • Didn't know that since python 3.5 pip is bundled, this solves my question, not sure why I was downvoted but thanks. – shrimpdrake May 18 '18 at 11:37
  • 1
    Probably because it would better fit in [superuser](https://superuser.com) or [serverfault](https://serverfault)? Nevertheless, not enough for me to downvote; upvoted. – hoefling May 18 '18 at 11:53
  • 2
    Pip did not come bundled in the EPEL version of python36 on my CentOS7 machine, just an FYI. I had to use the setuptools package to get it. – xjsc16x Sep 11 '18 at 14:44
  • @xjsc16x yeah well it is available in the IUS repo; this is why I added this answer in first place. – hoefling Sep 11 '18 at 14:48
  • The rpm repo has been moved to https://repo.ius.io/ius-release-el7.rpm – sc30 Jul 26 '21 at 20:53
42

To install pip for python 3.6 on CentOS 7 you need to run

$ python3.6 -m ensurepip

  • 6
    This one is the most up to date solution and should be preferred if `pip` is not installable via `yum`. – hoefling Dec 10 '18 at 19:06
  • 2
    See [EPEL Python 3.6 with pip on CentOS 7](https://cjsawer.whitewillow.co.uk/2018/08/29/epel-python-3-6-with-pip-on-centos-7/) for a more complete answer about how to install `python3.6` via EPEL. – phoenix Apr 03 '19 at 12:41
  • This is the best answer. – Roy Jan 11 '21 at 01:49
  • I just used this trick to drastically simplify some Ansible playbooks (via the shell and command modules); Ansible could use my specified python3 interpreter but couldn't find its pip. This made it work, and reduced the number of tasks I needed – aidan May 11 '21 at 19:55
  • It need to do an upgrade on pip3 to work correctly for me: ```pip3 install --upgrade pip``` – Sajjad Hoviegar Aug 15 '23 at 05:31
25

Follow these commands in Centos 7

yum install python36
yum install python36-devel
yum install python36-setuptools
easy_install-3.6 pip

to check the pip version:

pip3 -V
pip 18.0 from /usr/local/lib/python3.6/site-packages/pip-18.0-py3.6.egg/pip (python 3.6)
Rajiv Sharma
  • 6,746
  • 1
  • 52
  • 54
16

There is now a python3-pip package in the CentOS 7 base repository as of 2019-08-22. There is no longer a need for third-party repositories or packages.

Installing python3-pip will also install libtirpc, python3, python3-libs, and python3-setuptools:

yum install --assumeyes python3-pip

You can now verify the version (yes, it is old, but it's what is coming from the base repository):

$ pip3 --version
pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)

If you don't want to stray from the files provided by the python3-pip package, and you don't want to see warnings about pip being old, see https://stackoverflow.com/a/46288945/534275 for silencing the messages.

Alan Ivey
  • 917
  • 9
  • 20
5

Pip is not bundled in the EPEL version of python 3.6 for some reason. I assume a decent amount of people (such as me) will find this page because of that.

$ sudo yum install -y python36
...
$ python36 -m pip
/usr/bin/python36: No module named pip

So in this case, the setuptools package was the easiest solution.

$ sudo yum install python36-setuptools
$ sudo easy_install-3.6 pip
...
$ python36 -m pip --version
pip 18.0 from /usr/local/lib/python3.6/site-packages/pip-18.0-py3.6.egg/pip (python 3.6)
xjsc16x
  • 278
  • 1
  • 6
  • 16
4

In case you're seeing that pip3 is linked to python2 path:

$ pip3 -V

pip 8.1.2 from /usr/lib/python2.7/site-packages/pip (python 2.7)

You'll probably get:

$ pip3 install --upgrade pip

TypeError: parse() got an unexpected keyword argument 'transport_encoding'

Then try to clear commands cache with hash -r. This has worked for me:

# Install Python 3:
sudo yum install python36 -y

# Install & Upgrade pip3
sudo python36 -m pip install --upgrade pip

# Validate pip3 installation:
sudo python3.6 -m ensurepip
#  Successfully installed pip-10.0.1 setuptools-39.0.1

# Clear commands cache
hash -r
# might be required if getting in bash: /usr/bin/pip3: No such file or directory)

pip3 -V
# pip 19.0.3 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)

which pip3
# /usr/local/bin/pip3

pip2 -V
# pip 8.1.2 from /usr/lib/python2.7/site-packages (python 2.7)

which pip2
# /usr/local/bin/pip2

# Install your Python3 module:
sudo /usr/local/bin/pip3 install {required module for python3}
Community
  • 1
  • 1
Noam Manos
  • 15,216
  • 3
  • 86
  • 85
2

I got this error when I tried to install python36 over the built-in centos7 python 2.7.5 version:

Transaction check error:
  file /etc/rpm/macros.python from install of python-rpm-macros-3-32.el7.noarch conflicts with file from package python-devel-2.7.5-80.el7_6.x86_64

And I fixed it with these:

yum install python36
yum update python-devel
yum install python36-devel
easy_install-3.6 pip
eplt
  • 106
  • 4
1

Try This::

sudo yum update
sudo yum install -y python36u python36u-libs python36u-devel python36u-pip

Working for me perfectly.

Sachin
  • 1,460
  • 17
  • 24