How to Run Jupyter Notebooks on an Apple M1 Mac

You've probably heard a lot about the MacBook that contains the new Apple M1 chip. Quick summary: It's fast. Like, really fast. You, a data scientist or related tech professional, may have bought one.

Disclaimer: We'll attempt to keep this updated as best we can. These instructions are up to date as of November 30, 2020.

0:00
/0:10

Prepping to run a Jupyter notebook on my new MacBook

Run a Jupyter notebook on Apple M1 Mac

Either you're opening a notebook right now and your kernel instantly dies, or you haven't been able to get a Jupyter notebook operational yet. That's why we're here.

In this blog, we'll walk through how to get Jupyter functional on your M1 computer -- starting with the download step and ending with a fully operational Jupyter notebook. (We'll assume you don't know if you have Jupyter on your computer yet. If you know with certainty that you have Jupyter downloaded, you can skip down here.)

Check if Python & Jupyter are already installed.

Step 1: Open up your Terminal by holding Command and hitting Space, which should bring up your Spotlight Search. Then, type Terminal and hit Return.

Step 2: In your Terminal, type jupyter notebook and hit Return.

  • If your Terminal looks like the image directly below and a Jupyter interface opens in your browser like the the second image below, then Jupyter is installed. You're almost done. (It's OK if you get a kernel error, we'll figure that out later!) Skip to step 6.
A screenshot of a Terminal with Jupyter successfully running.
The traditional Jupyter interface, with several folders visible.
  • If, instead, your Terminal says command not found: jupyter then you need to see if Python is even installed before you can install Jupyter. Move to step 3.

Step 3: Let's check if Python has been installed. In the terminal, type python3 and hit Return.

The Python interpreter open in the Terminal.
  • If you see something similar Python 3.X.Y, with the >>> at the bottom, then great! That means Python 3 is installed. Go ahead and type quit(). Jump ahead to step 5.
  • If you get a command not found: python3 error, this means that you need to install Python. New Mac operating systems should have it already installed, so if you're finding an error, make sure that there isn't a typo somewhere. Move to step 4.

Step 4: You can install Python by going to XCode Command Line Tools. You'll need to login with your Apple ID and follow the instructions. Note that the normal Anaconda download won't work here, as the M1 computer isn't 64-bit. Once you're done, head back up to Step 3.

Step 5: If you've installed Python but had trouble installing Jupyter, then go to your Terminal and type pip3 install jupyter. If that doesn't work, then head here and follow the instructions.

Fix the Jupyter kernel issue

At this point, Python and Jupyter should be installed. You want to stop your kernel from repeatedly dying.

Step 6: In your Terminal, type jupyter notebook and hit Return. Once you do, then click "New" (on the right-hand side) and open up a Python 3 notebook.

The traditional Jupyter interface, with several folders inside. Click the New button on the right.
  • If you're able to run commands in your notebook – great! The tutorial is over. Skip to the bottom for a note about TensorFlow (if TensorFlow is what you care about) or feel free to check out some of our other posts, mostly about computer vision, here.

Step 7: Thanks to this link and user burakozdamar publicizing George Hotz' YouTube video, we learned a workaround that will stop your Jupyter notebook kernel from... well, stopping.

You will need to use the Terminal and/or Finder to find a filepath in your system that ends with ipykernel/eventloops.py. (On my system, it is lib/python3.8/site-packages/ipykernel/eventloops.py, but yours may vary slightly. The important thing is that you find the eventloops.py file.) You will make one change to this file.

  • Open Terminal.
  • Type nano filepath/ipykernel/eventloops.py where filepath should be the specific filepath that takes you to that specific eventloops.py in the ipykernel folder. Hit Enter. You should see the following:
Text editor view of eventloops.py.
  • Use your arrow keys to navigate to def _use_appnope(), which is the first function toward the bottom of the screenshot above. The return line is what we are going to edit.
  • In that return line, use your arrow keys to navigate all the way to the right-hand side of that line. After V('10.9'), you are going to add:

and platform.mac_ver()[2] != 'arm64'

The full line should look like this when you are done:

  • Once you have made that edit and are sure you haven't created a typo, then hold Control and hit x to exit.
  • It will ask you to save. Press y. Then press Return.

I recognize: this process is a very "do as I say and don't ask any questions" process. If you want to know more, George Hotz excellently describes the debugging process in his video; you can jump to around where he makes the change (47 minutes, 30 seconds) here.

Note that George also edits the docstring (the text between the """ triple quotation marks """) to better reflect what the function is doing – checking for Apple Silicon.

Step 8: If you've followed the above steps, you should be good to go. I usually quit the Terminal (hold Command and press Q) because I think that, sometimes, updates won't immediately take effect without restarting the Terminal. Make sure that it works by returning to step 6 and writing commands in your Jupyter notebook.

You should now be set up to go

Thanks for following along. I hope this is helpful. Let us know if you spot any mistakes or needed updates (use the email button on the left side of the screen) – I want to keep this as helpful as possible for people, and new technology tends to change very quickly.

If you're next step is using OpenCV, follow our guide on how to to safely install OpenCV with your M1.

Want to use TensorFlow with your M1?

If your goal is to install TensorFlow, it isn't officially supported yet on the M1.

However, you can create a virtual environment following the instructions here. Notice that while there are workarounds for certain TensorFlow features, other features like object_detection are not yet supported. If you learn of workarounds, let us know by emailing us.

Build and deploy with Roboflow for free

Use Roboflow to manage datasets, train models in one-click, and deploy to web, mobile, or the edge. With a few images, you can train a working computer vision model in an afternoon.