pip or pip3 to install packages for Python 3?
Asked Answered
S

9

210

I have a Macbook with OS X El Captain. I think that Python 2.7 comes preinstalled on it. However, I installed Python 3.5 too. When I started using Python 3, I read that if I want to install a package, I should type:

pip3 install some_package

Anyway, now when I use

pip install some_package

I get some_package installed for Python 3. I mean I can import it and use it without problems. Moreover, when I type just pip3 in the Terminal. I got this message about the usage:

Usage:   
  pip <command> [options]

which is the same message I get when I type just pip.

Does it mean that in previous versions, things were different, and now pip and pip3 can be used interchangeably? If so, and for the sake of argument, how can I install packages for Python 2 instead of Python 3?

Stearic answered 27/11, 2016 at 18:42 Comment(2)
https://mcmap.net/q/128885/-should-i-use-pip-or-pip3-duplicate is marked as a duplicate of this question, but is not specific to MacOS and IMHO has better answers.Fine
What worked on that version of MacOS also depends on how exactly you installed and configured Python 3. Back in the day, MacOS itself did not provide Python 3 at all.Fine
C
142

Your pip is a soft link to the same executable file path with pip3. you can use the commands below to check where your pip and pip3 real paths are:

$ ls -l `which pip`
$ ls -l `which pip3`

You may also use the commands below to know more details:

$ pip show pip
$ pip3 show pip

When we install different versions of python, we may create such soft links to

  • set default pip to some version.
  • make different links for different versions.

It is the same situation with python, python2, python3

More information below if you're interested in how it happens in different cases:

Cly answered 27/11, 2016 at 18:58 Comment(9)
I think this is wrong. My pip3 also calls itself just pip in its help output, still, plain pip installs Python 2 packages on my system. I think https://mcmap.net/q/126264/-pip-or-pip3-to-install-packages-for-python-3 is correct, at least it agrees with my observations.Argyrol
it changes on what environment and how you install python, this answer is to give clue how to know pip works, and to answer the questioner's situation. if it not same on your system, you still can use the same way to find out why. not mean it is wrong answer.Cly
I doubt that. I have no Mac but on the Ubuntu flavours I tested, pip variants are not symlinks. Instead, they are tiny Python scripts that differ only in the shebang line.Argyrol
yeah, that's what I mean it changes on environment and the way you install python(brew, apt, pyenv, compile manually, etc) and to the questioner's situation it is because they are soft links, and we use ls -l and pip show to verify the reason.and of course, this answer is to answer his question.Cly
I don’t think there were symlinks on the questioner’s computer. I don’t find any reference that pip ever worked/works this way.Argyrol
as I mentioned, it is depends on how you install it. MacOS users mostly use brew and which will create soft links: github.com/Homebrew/homebrew-core/blob/master/Formula/…Cly
For more information, Fedora family, Archlinux family have the same way: src.fedoraproject.org/cgit/rpms/python-pip.git/tree/…, git.archlinux.org/svntogit/packages.git/tree/trunk/…Cly
For Debian family is different: salsa.debian.org/python-team/modules/python-pip/blob/master/…Cly
I just installed pip/pip3 in current ArchLinux and Fedora containers: No symlinking. RHEL doesn't do it either. I cannot test Mac, though, but this Homebrew script even links python3 to python, which is a disastrously bad idea.Argyrol
M
48

If you had python 2.x and then installed python3, your pip will be pointing to pip3. you can verify that by typing pip --version which would be the same as pip3 --version.

On your system you have now pip, pip2 and pip3.

If you want you can change pip to point to pip2 instead of pip3.

Miche answered 5/6, 2017 at 21:24 Comment(13)
how do you change thatSiderosis
@Siderosis The easiest way is to define an alias like this: alias pip="pip3"Miche
I did this, but my pip3 was v9 when pip was v10, so I typed pip3 install --upgrade pip and it made both v10Fruiter
This answer is wrong. pip will not point to pip3. pip will install Python 2 packages, and pip3 will install Python 3 packages. Tested on Lubuntu 18.10.Argyrol
@TorstenBronger what was the order of python installations in your environment?Miche
This is difficult to say because both versions are pre-installed.Argyrol
Everybody can check this easily: docker run -ti ubuntu bash, install python-pip, then python3-pip, then type pip install pyvisa, which installs PyVISA only for Python2.Argyrol
@TorstenBronger What you mentioned is installing pip, not installing python. The answer talks about installing python.Miche
The respective Python version is installed as a dependency by installing the respective pip version. The naked Ubuntu container has no Python version pre-installed.Argyrol
@TorstenBronger Anyway your scenario is different from what the answer is saying. The answer talks about installing python directly. Hope that clears the confusion.Miche
@TorstenBronger Also the OP asked about Mac, not Ubuntu.Miche
You can also install Python2/3 directly – same result.Argyrol
@TorstenBronger How do you install python2/3 so I can try to reproduce?Miche
A
27

When you install python3, pip3 gets installed. And if you don't have another python installation(like python2.7) then a link is created which points pip to pip3.

So pip is a link to to pip3 if there is no other version of python installed(other than python3). pip generally points to the first installation.

Airfield answered 27/11, 2016 at 18:56 Comment(0)
T
18

By illustration:

pip --version
  pip 19.0.3 from /usr/lib/python3.7/site-packages/pip (python 3.7)

pip3 --version
  pip 19.0.3 from /usr/lib/python3.7/site-packages/pip (python 3.7)

python --version
  Python 3.7.3

which python
  /usr/bin/python

ls -l '/usr/bin/python'
  lrwxrwxrwx 1 root root 7 Mar 26 14:43 /usr/bin/python -> python3

which python3
  /usr/bin/python3

ls -l /usr/bin/python3
  lrwxrwxrwx 1 root root 9 Mar 26 14:43 /usr/bin/python3 -> python3.7

ls -l /usr/bin/python3.7
  -rwxr-xr-x 2 root root 14120 Mar 26 14:43 /usr/bin/python3.7

Thus, my in my default system python (Python 3.7.3), pip is pip3.

Tedie answered 24/5, 2019 at 3:4 Comment(0)
U
11

I think pip, pip2 and pip3 are not soft links to the same executable file path. Note these commands and results in my Linux terminal:

mrz@mrz-pc ~ $ ls -l `which pip`
-rwxr-xr-x 1 root root 292 Nov 10  2016 /usr/bin/pip
mrz@mrz-pc ~ $ ls -l `which pip2`
-rwxr-xr-x 1 root root 283 Nov 10  2016 /usr/bin/pip2
mrz@mrz-pc ~ $ ls -l `which pip3`
-rwxr-xr-x 1 root root 293 Nov 10  2016 /usr/bin/pip3
mrz@mrz-pc ~ $ pip -V
pip 9.0.1 from /home/mrz/.local/lib/python2.7/site-packages (python 2.7)
mrz@mrz-pc ~ $ pip2 -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
mrz@mrz-pc ~ $ pip3 -V
pip 9.0.1 from /home/mrz/.local/lib/python3.5/site-packages (python 3.5)

As you see they exist in different paths.

pip3 always operates on the Python3 environment only, as pip2 does with Python2. pip operates in whichever environment is appropriate to the context. For example, if you are in a Python3 venv, pip will operate on the Python3 environment.

Unmeriting answered 20/9, 2017 at 11:55 Comment(2)
I would say it's a little misleading to say that pip is linked to whatever environment is appropriate for the context. In the case of venv the pip executable is specific to the venv and not the system. Unless you installed multiple versions of python in the same venv I can't see this problem arising there. When not using a venv, the version of pip used is sometimes unintuitive and depends on the configuration of your system (often it's determined by which version of python was installed first, as others have said) . But Pip doesn't have any intelligence it uses to select a version dynamicallyNedry
This is specific to your system, not Linux generally. The OP was asking about MacOS, anyway.Fine
C
8

This is a tricky subject. In the end, if you invoke pip it will invoke either pip2 or pip3, depending on how you set your system up.

Celanese answered 27/11, 2016 at 18:47 Comment(1)
This really should be a comment because it does not provide an answer to the question(s) being posed, just says "it depends" and doesn't even go into detail about what it depends on.Appal
C
2

If you installed Python 2.7, I think you could use pip2 and pip2.7 to install packages specifically for Python 2, like

pip2 install some_pacakge

or

pip2.7 install some_package

And you may use pip3 or pip3.5 to install pacakges specifically for Python 3.

Calculous answered 27/11, 2016 at 18:51 Comment(0)
B
1

On my Windows instance - and I do not fully understand my environment - using pip3 to install the kaggle-cli package worked - whereas pip did not. I was working in a conda environment and the environments appear to be different.

(fastai) C:\Users\redact\Downloads\fast.ai\deeplearning1\nbs>pip --version

pip 9.0.1 from C:\ProgramData\Anaconda3\envs\fastai\lib\site-packages (python 3.6)

(fastai) C:\Users\redact\Downloads\fast.ai\deeplearning1\nbs>pip3 --version

pip 9.0.1 from c:\users\redact\appdata\local\programs\python\python36\lib\site-packages (python 3.6)

Brann answered 28/10, 2017 at 6:37 Comment(0)
C
0

Given an activated Python 3.6 virtualenv in somepath/venv, the following aliases resolved the various issues on a macOS Sierra where pip insisted on pointing to Apple's 2.7 Python.

alias pip='python somepath/venv/lib/python3.6/site-packages/pip/__main__.py'

This didn't work so well when I had to do sudo pip as the root user doesn't know anything about my alias or the virtualenv, so I had to add an extra alias to handle this as well. It's a hack, but it works, and I know what it does:

alias sudopip='sudo somepath/venv/bin/python somepath/venv/lib/python3.6/site-packages/pip/__main__.py'

background:

pip3 did not exist to start (command not found) with and which pip would return /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pip, the Apple Python.

Python 3.6 was installed via macports.

After activation of the 3.6 virtualenv I wanted to work with, which python would return somepath/venv/bin/python

Somehow pip install would do the right thing and hit my virtualenv, but pip list would rattle off Python 2.7 packages.

For Python, this is batting way beneath my expectations in terms of beginner-friendliness.

Consumptive answered 24/7, 2019 at 0:56 Comment(3)
expectations: agree. This problem started with having Python 3 not really compatible with Python 2Neral
@Neral it's got extremely little to do with 2 vs 3 and a lot more with path management and pip's often obscure relationship with python and the python version. just figuring out how to install pip with python at all is a pain in the neck, at least on macOS. And so is pip's insistence to come in as an obsolete version most of the time, which needs immediate updating.Consumptive
Of course you are correct. But your explanation shows the complexity leading to my misunderstanding. Learning Fortran was easy, same Pascal, Lisp, C, C++, C#, JS, Python. Building linux, setting up X Windows, Apache, that's doable. But setting up python, that really beats me :-(Neral

© 2022 - 2024 — McMap. All rights reserved.