I generally use Python 2.7 but recently installed Python 3.5 using Miniconda on Mac OS X. Different libraries have been installed for these two versions of python. Now, the entering either of the keywords ‘python’ or ‘python3’ in terminal invokes python 3.5, and ‘python2’ returns ‘-bash: python2: command not found’. How can I now invoke them specifically using aliases ‘python2’ and ‘python3’ respectively?
I am currently using OS X El Capitan.
IMHO, the best way to use two different Python versions on macOS is via
homebrew. After installing homebrew on macOS, run the commands below on your terminal.
brew install python@2 brew install python
OSX’s Python binary (version 2) is located at
if you use
which python it will tell you where the
python command is being resolved to. Typically, what happens is third parties redefine things in
/usr/local/bin (which takes precedence, by default over
/usr/bin). To fix, you can either run
/usr/bin/python directly to use 2.x or find the errant redefinition (probably in
/usr/local/bin or somewhere else in your
I already had python3 installed(via miniconda3) and needed to install python2 alongside in that case
brew install python won’t install python2, so you would need
brew install python@2 .
python2 refers to python2.x from
python3 refers to python3.x from
python refers to python3 by default.
Now to use
python as alias for python2, I added the following to
To go back to python3 as default just remove this line when required.
How to set the python version back to 2.7 if you have installed Anaconda3 (Python 3.6) on MacOS High Sierra 10.13.5
Edit the .bash_profile file in your home directory.
hash out the line # export PATH=”/Users/YOURUSERNAME/anaconda3/bin:$PATH”
Close the shell open again you should see 2.7 when you run python.
Then if you want 3.6 you can simply uncomment your anaconda3 line in your bash profile.
Trying to unlink python will end in tears in Mac OSX.
You will something like this
unlink: /usr/bin/python: Operation not permitted
Hope that helps someone out !! 🙂 🙂
Similar to John Wilkey’s answer I would run python2 by finding
which python, something like using
/usr/bin/python and then creating an alias in
I can now run python3 by calling
python and python2 by calling
I just follow up the answer from @John Wilkey.
python used to represent python2.7 (located in
However the default python_path is now preceded by
python3; hence when typing
python, I didn’t get either the python version.
I tried make a link in
ln -s /usr/bin/python /usr/local/bin/
It works when calling
If you want to use Apple’s system install of Python 2.7, be aware that it doesn’t quite follow the naming standards laid out in PEP 394.
In particular, it includes the optional symlinks with suffix
2.7 that you’re told not to rely on, and does not include the recommended symlinks with suffix
2 that you’re told you should rely on.
If you want to fix this, while sticking with Apple’s Python, you can create your own symlinks:
$ cd <somewhere writable and in your PATH> $ ln -s /usr/bin/python python2
Or aliases in your bash config:
alias python2 python2.7
And you can do likewise for Apple’s 2to3, easy_install, etc. if you need them.
You shouldn’t try to put these symlinks into
/usr/bin, and definitely don’t try to rename what’s already there, or to change the distutils setup to something more PEP-compliant. Those files are all part of the OS, and can be used by other parts of the OS, and your changes can be overwritten on even a minor update from 10.13.5 to 10.13.6 or something, so leave them alone and work around them as described above.
Alternatively, you could:
- Just use
python2on the command line and in your shbangs and so on.
- Use virtual environments or conda environments. The global
python2, etc. don’t matter when you’re always using the activated environment’s local
- Stop using Apple’s 2.7 and instead install a whole other 2.7 alongside it, as most of the other answers suggest. (I don’t know why so many of them are also suggesting that you install a second 3.6. That’s just going to add even more confusion, for no benefit.)