1

I know that sudo is a command used for administrators' tasks, such that installing or uninstalling a program.

What I don't understand from this command:

sudo pip3 install name-of-the-file.whl

is the pip3, which probably is an argument of sudo, but what is it useful for?

I am using Mac OSX 10.9.5.

  • pip3 is the python 3 package manager tool. probably it installs a python 3 package into the system wide python directory tree, so all users can access that package – deeenes Oct 19 '14 at 13:53
  • of course sudo is needed, otherwise those directories (e.g. /usr/lib/python/site-packages/) are not writeable – deeenes Oct 19 '14 at 13:55
3

The command sudo is a frontend program that takes arguments, switches and commands. Most commands can take arguments & switches, but some can take other commands to run. Think of them as wrappers if you will.

So sudo will create an entirely new instance of Bash (with elevated privileges as root), and then run the command you provided it.

So in this case sudo is running the program pip3 + all the arguments that occur after it. Those arguments, are for pip3, not for sudo. NOTE: keep in mind this template when you see sudo:

$ sudo <switches> "<command> <command's arguments + switches>"

So then what's pip3?

The commands themsevles are often a wealth of information when you're unsure what they do. Most will provide you a short synopsis of how to use them and what they do if you run them with a --help switch. This can vary, sometimes it's -help or even -h.

I don't have pip3 installed, but I do have pip2. They are in fact the same tool, but pip3 is a newer version.

$ pip2 --help

Usage:   
  pip <command> [options]

Commands:
  install                     Install packages.
  uninstall                   Uninstall packages.
  freeze                      Output installed packages in requirements format.
  list                        List installed packages.
  show                        Show information about installed packages.
  search                      Search PyPI for packages.
  zip                         Zip individual packages.
  unzip                       Unzip individual packages.
  bundle                      Create pybundles.
  help                        Show help for commands.

General Options:
  -h, --help                  Show help.
  -v, --verbose               Give more output. Option is additive, and can be used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output.
  --log <file>                Log file where a complete (maximum verbosity) record will be kept.
  --proxy <proxy>             Specify a proxy in the form [user:passwd@]proxy.server:port.
  --timeout <sec>             Set the socket timeout (default 15 seconds).
  --exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
  --cert <path>               Path to alternate CA bundle.

The --help shows us what this tool can take in terms of commands and switches, but doesn't tell us what it does. Let's see where it's located. For this you can use the type command:

$ type -a pip2
pip2 is /usr/bin/pip2
pip2 is /bin/pip2

Notice that it's in /usr/bin and /bin. So that would indicate that our package manager installed this tool. On a Red Hat based distro you could use rpm to find out what package this executable, pip2, belongs to.

$ rpm -qf /bin/pip2
file /bin/pip2 is not owned by any package

Interesting, so this executable isn't being managed as part of my system's package management tool, rpm.

So now what?

Well we're far from dead. Let's see if the system can give us any additional hints as to what installed pip2.

Most Linux distros ship with mlocate, a tool that periodically builds an index of all the files that are on the hard disk. So we can search for pip2 to get hints of other locations of places where pieces of it may be lurking.

$ locate pip2
/usr/bin/pip2
/usr/bin/pip2.7

So we know there's 2 versions installed, 2 and 2.7. But that didn't help a lot, so let's cast the net a bit wider and look for just pip. Also we're going to filter the results a bit and only get results that end with pip. We'll use grep to do this bit.

$ locate pip | grep 'pip$'
/home/saml/.pip
/home/saml/dotfiles/.pip
/home/saml/dotfiles/.pyenv/shims/pip
/home/saml/dotfiles/.pyenv/versions/3.2.5/bin/pip
/home/saml/dotfiles/.pyenv/versions/3.2.5/lib/python3.2/site-packages/pip-1.3.1-py3.2.egg/pip
/opt/ec2-api-tools/bin/ec2apip
/opt/ec2-api-tools/bin/ec2upip
/usr/bin/pip
/usr/bin/python-pip
/usr/lib/python2.7/site-packages/pip

Jackpot!

Finally! Some useful information. pip2 is a tool used by our installation of Python. So if we go to Google and look up "pip python":

Oh! pip2 is a package manager for Python.

So that command is installing a .whl file for our Python installation.

  • Thanks! locate command is not working for me, could you tell me why? – nbro Oct 19 '14 at 15:39
  • @Broly - what distro of Linux are you using? – slm Oct 19 '14 at 15:43
  • Actually I am using a Mac, which is not mine, but I have to work with it.. – nbro Oct 19 '14 at 15:43
  • 1
    @Broly - OK, good. I've never done a locate on OSX before so that's good to know for future reference. – slm Oct 19 '14 at 15:49
  • 1
    @cipricus - pip is a package manager that operates outside of` apt-get. pip manages Python packages/libraries, typically, whereas apt-get manages packages (.deb files) that are distributed via repositories for Debian/Ubuntu/Mint Linux distros. – slm Sep 15 '15 at 18:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.