Solarian Programmer

My programming ramblings

Install Python with NumPy, SciPy and Matplotlib on macOS Big Sur (Intel version)

Posted on October 4, 2016 by Paul

Updated 15 June 2021

In this article, I will show you how to install Python with NumPy, SciPy and Matplotlib on macOS Big Sur.

I assume you are on an Intel based Mac. If you have an arm64 Mac, also called Apple Silicon, please check my other article.

MacOS Big Sur comes by default with Python 2.7 which, at this point, receives only bug fixes and is EOL since 2020. Python 3 is the future and it is supported by all major Python libraries. In this tutorial, we’ll use Python 3.9 which is the latest stable release of Python at the time of this writing.

Start by installing the Command Line Tools for macOS. Please note, that you will need the Command Line Tools even if you’ve already installed Xcode. Open a Terminal and write:

1 xcode-select --install

Once the Command Line Tools are installed, we can install Python.

As a side note, after you install the Command Line Tools, you will also get a slightly older Python 3 version (3.8). In this article, we are going to use the latest stable version of Python which, at the time of this writing is 3.9.

Go to https://www.python.org/ and download Python. The official installer of Python is a pkg file that will start a GUI installer which will guide you through the installation.

You can have multiple Python 3 versions installed on your macOS machine. If this is the case, you can select which version you want to use by specifying the version number, e.g.:

1 python3.8

or:

1 python3.9

After the above, you can invoke Python 3.9 using the python3.9 command. python3 will also invoke the latest installer version of Python 3. This is what I see if I run python3.9 on my machine:

1 % python3.9
2 Python 3.9.3 (v3.9.3:e723086bc3, Apr  2 2021, 08:20:09)
3 [Clang 12.0.0 (clang-1200.0.32.29)] on darwin
4 Type "help", "copyright", "credits" or "license" for more information.
5 >>> quit()
6 %

Next, let’s follow best practices and create a new Python environment, named work (feel free to use a different name), in which we can install NumPy, SciPy and Matplotlib:

1 python3.9 -m venv work
2 source work/bin/activate

At this point, your prompt should indicate that you are using the work environment. You can read more about Python environments in the documentation.

Once an environment is activated, all the install commands will apply only to the current environment. By default, if you close your Terminal, the environment is deactivated. If you want to be able to use it, use the source work/bin/activate command.

We can install NumPy, SciPy and Matplotlib with:

1 pip install numpy
2 pip install scipy
3 pip install matplotlib

As a side note, when you are in an active environment you can use the python command to invoke the Python interpreter, no need to use the version number.

Fire up Python, import scipy and print the version of the installed library. This is what I see on my machine:

1 (work) % python
2 Python 3.9.3 (v3.9.3:e723086bc3, Apr  2 2021, 08:20:09)
3 [Clang 12.0.0 (clang-1200.0.32.29)] on darwin
4 Type "help", "copyright", "credits" or "license" for more information.
5 >>> import scipy as sp
6 >>> sp.version.version
7 '1.6.3'
8 >>> quit()
9 (work) %

Let’s try something a bit more interesting now, let’s plot a simple function with Matplotlib. First, we’ll import NumPy and Matplotlib with:

1 import numpy as np
2 import matplotlib.pylab as plt

Next, we can define some points on the (0, 1) interval with:

1 t = np.linspace(0, 1, 100)

Now, let’s plot a parabola defined on the above interval:

1 plt.plot(t, t**2)
2 plt.show()

You should see something like this:

Matplotlib parabola

As you’ve probably noticed, plt.show() is a blocking command. You won’t be able to use the interpreter until you close Figure 1.

There is also an interactive mode in which you can plot functions. Close Figure 1 and write:

1 plt.ion()
2 plt.plot(t, t**2)
3 plt.title("Interactive plot test")
4 plt.plot(t, t**3)
5 plt.xlabel("t")

This is what you should see:

Matplotlib interactive mode draw two curves, add title and axis labels

At any point you can disable the interactive plot mode with:

1 plt.ioff()

after which you will need to use the plt.show() function in order to actually see the result of the plt.plot function.

If you want to learn more about Python and Matplotlib, I recommend reading Python Crash Course by Eric Matthes. The book is intended for beginners, but has a nice Data Visualization intro to Matplotlib chapter:

Another good Python book, for more advanced users, which also uses Matplotlib for some of the book projects is Python Playground by Mahesh Venkitachalam:


Show Comments