36

When I enter:

port select --list python

This is the result:

Available versions for python:
    none
    python25 (active)
    python25-apple
    python26-apple
    python27
    python27-apple

I thought when I use python I would be using version 2.5. Instead when I enter "python", version 2.7 seems to be active. How do I change that to version 2.5?

Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
jamix
  • 5,484
  • 5
  • 26
  • 35
kadrian
  • 4,761
  • 8
  • 39
  • 61

5 Answers5

47

Use

osx$ port select --list python

to list your available Python installations.

Then use the "--set" option to "port select" to set the port you wish to use.

osx$ sudo port select --set python python27
easyE
  • 681
  • 1
  • 5
  • 5
  • 8
    Note: This answer doesn't technically answer the original question. It does, however, answer the question that I had which brought me to this page, which was how to select which port was active. – lindes Nov 27 '13 at 16:24
31

Why this happens

MacPorts installs binaries into /opt/local by default.

There is also a preinstalled python on your Mac. When just typing python to start, it will start the preinstalled python version not affected by MacPorts install.

To see what version will be executed when just typing python use

which python

To start the mac ports version use

/opt/local/bin/python2.5

Solution

If you wish to always use MacPorts binaries you can change your path so that /opt/local/bin appears before /use/local/bin etc.

/opt/local/bin etc. are added in ~/.tcshrc by MacPorts. Also be sure to look in ~/.profile and ~/.bash_profile as these are default on mac.

Selecting version in ports

First type port select --list python to list installed version, then just for example sudo port select --set python python27 to select 2.7. For more information type port help select.

vidstige
  • 12,492
  • 9
  • 66
  • 110
  • thanks, that works, but where is the point in selecting python with macports then? – kadrian Nov 20 '11 at 13:39
  • well, in this case there is no real point. Usually there is no program in the /usr/local/bin folder and then it makes sense activating a version in MacPorts. – vidstige Nov 20 '11 at 13:44
  • 3
    The usual macports user adds /opt/local/bin to their path before system directories so gets the python given by port select. You probably have it after. – mmmmmm Mar 16 '12 at 14:29
  • 2
    Let /opt/local/bin come before /usr/bin. Set the path e.g. this way in .profile or .bash_profile: PATH=/opt/local/bin:$PATH, then either restart Terminal.app or reread the file you changed. An answer on how to pick the desired python is found here: http://stackoverflow.com/questions/6116697/macports-python-select-command-not-found – boerre Mar 19 '13 at 10:31
  • 1
    I don't know why the downvote, perhaps someone was taking [csh.whynot](http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot) to heart, and/or mis-understood the question to be about using `port select`? Anyway, one way you could improve the question is to have more mention of how to change paths in other shells. After all, (t)csh is not the default on macs. So mention of `.profile`, and/or `.bash_profile`, etc., would improve your answer. – lindes Nov 27 '13 at 16:23
  • @lindes alright, thanks. I updated the answer. Feel free to edit if I missunderstood something. – vidstige Nov 27 '13 at 20:07
  • 1
    AFAICT macports automatically puts /opt/local/bin before /usr/local/bin in your path on install, so this is unlikely to be the real issue (although may be in the OP's case), the issue is probably best resolved using sudo port select --set python python27 (see easyE's answer for more details) – JobJob Apr 26 '14 at 11:00
  • @user104264 If you actually read the question you will learn that the OP had already selected python 2.5 – vidstige Apr 26 '14 at 11:05
  • @vidstige you're right - I did acknowledge that this "may be the issue in the OP's case" and since he accepted your answer, it's highly likely it was :) My comment was just designed for others, to draw attention to easyE's answer which I think is likely to be the solution that more people coming here are looking for. – JobJob May 14 '14 at 14:40
  • To only list and select python3, do `port select --list python3` then `sudo port select --set python3 ` – boerre Apr 08 '19 at 17:08
9

Your shell probably caches the invocation of python and does not look in PATH again. So, when you called python before port select in the same shell session, you need to clear this cache.

For bash, clear the cache using

hash -r

or simply open a new terminal window.

raimue
  • 4,322
  • 1
  • 21
  • 31
  • I found that after invoking the "wrong" version, then using port select, then trying again, it would still invoke the wrong version despite the path to the executable being correct. Thus, this answer might not be the best on it's own, but can be in conjunction with the other answers above. – Paul Jun 14 '22 at 15:02
5

Python installs to:

  • Default (Apple): /usr/local/bin
  • MacPorts: /opt/local/bin
  • python.org: /Library/Frameworks/python...

Default python is required by system so best not to mess with it too much. MacPorts Python convenient to use because getting packages so easy.

You can set link as shortcut:

sudo ln -s /opt/local/bin/python /usr/local/bin/ppython

Then from command-line to use MacPorts version:

ppython script.py
Nick
  • 27,566
  • 12
  • 60
  • 72
0

An alternative is symlinking each and every Jupyter binary so that the version number does not appear:

cd /opt/local/bin
JUPYTER_VERSION=2.7
for a in jupyter*$JUPYTER_VERSION; do sudo ln -s $a $(echo $a | sed -e 's:-'$JUPYTER_VERSION':g'); done
Emanuele Cipolla
  • 301
  • 3
  • 16