Getting scientific Python running on a Mac is one of the biggest hurdles for data scientists who are just getting started (and, trust us, professionals too!). We'd usually steer readers toward one of the more popular articles on the subject, but it's gotten a bit stale. Therefore, here are updated step-by-step instructions for getting a basic environment set up.
In this guide we'll install the following packages:
- Quickstart
- Homebrew
- Python
- virtualenv and virtualenvwrapper https://www./watch?v=N5vscPTWKOk
- NumPy
- SciPy
- matplotlib
- IPython and the Qt console
Quickstart
For the impatient, the following code will get you up and running without delay. Otherwise, please continue reading the rest of this post for step-by-step instructions and explanations.
NB: This code assumes Homebrew is installed; if it isn't, follow the instructions below! Also, be sure to follow any instructions Homebrew gives after each installation, such as modifying your path variables.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
brew install python pip3 install virtualenv pip3 install virtualenvwrapper pip3 install numpy brew install gfortran pip3 install scipy brew install freetype pip3 install matplotlib pip3 install ipython # install the QT libraries as described # in the text below before continuing brew install pyqt brew install zmq pip3 install pyzmq pip3 install pygments |
Homebrew
Homebrew's homepage puts it well: "Homebrew installs the stuff you need that Apple didn’t." (It used to say, "Homebrew is the easiest and most flexible way to install the UNIX tools Apple didn't include with OS X," which may not be as catchy as the new wording, but does a better job explaining.) You will need to have XCode and its Command Line Tools installed first (get them in the App Store). Then, install Homebrew on your machine by pasting this into Terminal:
1 |
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" |
That's it. Try running brew update and brew doctor at the command line to make sure it's working properly.
You'll need to add the Homebrew directory to the front of your system path, in order to ensure that Homebrew-installed software is given priority over any other versions. To do so, open the .bash_profile in your user directory (that's the ~ directory or, more verbosely, /Users/[your_user_name]) and add the following line (if you don't have a .bash_profile, just create one with any text editor):
1 |
export PATH=/usr/local/bin:$PATH |
Restart Terminal so it picks up the new path. Homebrew is generally very good about alerting you to any action you need to take after it runs, including path modifications. Make sure to pay attention to its output.
Python
Now to the main event: Python. These instructions are for version 2.7.3. If you want to install something else, like Python3, just adjust the commands as required. With Homebrew, getting Python is quite easy:
1 |
brew install python |
This will also install package management tools like pip, which we'll need later. To get them to work seamlessly, add this to your .bash_profile:
1 |
export PATH=/usr/local/share/python:$PATH |
To verify the installation, type which python into Terminal. You should see /usr/local/bin/python in response.
virtualenv
virtualenv is a tool that allows you to create isolated Python environments, each with its own set of packages and dependencies. This is useful for testing or managing package requirements (for example, if you build an application that is dependent on a certain version of a third-party package but another application requires a more recent version, you might break the first application by upgrading). This is not required, and all the commands below should work whether or not you are using virtualenv, so consider this step for convenience only. The only difference will be that directories (such as that returned by which pip) will point to the virtualenv rather than /usr/local.
First, install virtualenv and virtualenvwrapper, a tool that makes working with virtualenv somewhat easier:
1 2 |
pip install virtualenv pip install virtualenvwrapper |
Next, source the virtualenvwrapper script:
1 |
source /usr/local/share/python/virtualenvwrapper.sh |
This will create a (hidden) virtualenv directory at ~/.virtualenv. Now you can create your first virtual environment:
1 |
mkvirtualenv test1 |
Your new virtualenv test1 comes with a complete install of Python 2.7.3 and its own version of pip. It is activated by default, so running any pip command will only impact this environment. Note that if you deactivate the virtualenv, you will lose access to any packages installed in it. You can switch between virtualenvs with the workon command. To delete your test virtualenv, run rmvirtualenv test1.
Numpy
NumPy, of course, forms the basis of most scientific work in Python. NumPy can be installed with pip, but that method failed on Macs until quite recently (see pip issue #707). If you'd like to try it, simply execute the following in Terminal:
1 |
pip install numpy |
SciPy
SciPy requires a Fortran compiler. To acquire one, use Homebrew:
1 |
brew install gfortran |
Once that installs, you may choose to install SciPy with pip:
1 |
pip install scipy |
matplotlib
Installing matplotlib, a versatile plotting library, follows the same pattern. However, you may have to install freetype first:
1 |
brew install freetype |
Either use pip:
1 |
pip install matplotlib |
IPython
If you're not using IPython as your interactive console, you should be. It improves on the stock Python console in every way. Installing IPython itself is a fairly straightforward pip command:
1 |
pip install ipython |
Getting the Qt Console to run is more difficult, but well worth it. First, you'll need to download the Qt library from this site. Once you have that set up, begin installing the prerequisites:
1 |
brew install pyqt |
After installing pyqt, Homebrew will prompt you to add the following to your .bash_profile:
1 |
export PYTHONPATH=/usr/local/lib/python:$PYTHONPATH |
Continue installing prerequisites:
1 2 3 |
brew install zmq pip install pyzmq pip install pygments |
And that's all -- you should be able to launch the Qt console by executing ipython qtconsole. If you want to see the matplotlib output inline (and why wouldn't you?), then execute:
1 |
ipython qtconsole --pylab=inline |
Fin.
We hope these instructions remove a common stumbling block for any data scientists getting started with scientific Python... and also those professionals who need a checklist for setting up new environments! After all, at some point we all start from square one.