Pip using system python osx

Navin Aggrawal picture Navin Aggrawal · May 28, 2011 · Viewed 20.5k times · Source

I installed python26 using macports, so the correct python on my system is /opt/local/bin/python

However, when I do

sudo pip install <packagename>

It gives me

sudo pip install <somepackage>                                           
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.6/site-packages/pip-1.0.1-py2.6.egg/pip/basecommand.py", line 126, in main
    self.run(options, args)
  File "/Library/Python/2.6/site-packages/pip-1.0.1-py2.6.egg/pip/commands/install.py", line 215, in run
    import setuptools
ImportError: No module named setuptools

Storing complete log in /Users/navin/.pip/pip.log

And so, I suspect that it is using the system python. I've installed distribute (which contains setuptools) via their site instructions. I installed pip via an installer as well. I somehow managed to clobber the setuptools for the system python I think, so that's why I'm having this problem now :(

What do I do to get pip working again?

Answer

Ioannis Filippidis picture Ioannis Filippidis · Feb 17, 2013

Summarizing the above, installing pip using Macports with:

sudo port install py27-pip

results in an installation of a package named py27-pip.

However, no /opt/local/bin/pip is installed and port select pip or port select py27-pip both fail (in contrast to a port select python). Changing things in the bin directory of another distribution is not generally recommended.

Note that /usr/bin python links point to the pre-installed python by Apple, /usr/local/bin point to those installed by MacPython from python.org, whereas /opt/local/bin is where Macports install their links. The actual Library installations can be found by ls -ls applied to the various python files in each bin directory).

To ensure that the Macports files are called, export the path for Macports last in your .bash_profile. For example, if you installed Macports and then happened to install a binary distribution from python.org, you will end having its path later in you ~/.bash_profile, so it will come first in the path variable and Macpython will be shadowing Macports.

After ensuring that the paths are appropriately set, the system still fails to find a pip command in the Macports bin directory, because it is installed as pip-2.7 and no pip is automatically created.

As a result, the system continues searching the path and if e.g. Macpython is added to the path some place later and has pip installed, then that pip will show up.

This can be avoided by the command proposed above:

sudo ln -s /opt/local/bin/pip-2.7 /opt/local/bin/pip