AboutBlogMediaTags

How to Install Jupyter Notebook on macOS

Runcell Team,

Jupyter Notebook is one of the fastest ways to experiment with Python code, share interactive documents, and prototype data workflows. macOS gives you several ways to install it, so you can choose the workflow that best fits your toolchain. This guide compares the most common options, highlights when to reach for each one, and walks through the exact commands to get everything running smoothly.

What was actually run for this page (2026-09-28, macOS 26.5, Apple Silicon): the global-pip attempt against Homebrew’s Python, the full venv route, and a read of the Homebrew formula’s metadata. The Conda and JupyterLab Desktop sections were not re-run for this update. The outputs quoted below are copied from that run.

RouteRun for this page?Result
pip install jupyter into Homebrew’s Python 3.13.1YesRefused: error: externally-managed-environment
pip inside a venvYes (install + jupyter --version; server not launched)Installs cleanly: JupyterLab 4.6.4, Notebook 7.6.3, ipykernel 7.3.0
Homebrew jupyterlab formulaMetadata only (brew info), not installedFormula 4.6.4; brings its own python@3.14, node, pandoc
CondaNo—
JupyterLab DesktopNo—

Before you start

Why a global pip install jupyter fails on Homebrew Python

Many guides, including an earlier version of this one, start with:

python3 -m pip install jupyter

If python3 is a current Homebrew Python, that command does not install anything. We tested Homebrew’s Python 3.13.1. Older Homebrew Pythons, from before Homebrew adopted this marker, may not refuse. Here is what it printed on the test machine (output shortened):

$ /opt/homebrew/opt/python@3.13/bin/python3.13 -m pip install jupyter error: externally-managed-environment × This environment is externally managed ╰─> To install Python packages system-wide, try brew install xyz, where xyz is the package you are trying to install. If you wish to install a Python library that isn't in Homebrew, use a virtual environment: python3 -m venv path/to/venv source path/to/venv/bin/activate python3 -m pip install xyz ...

The exit code was 1. This is PEP 668 : Homebrew marks its Python as managed by Homebrew, so pip refuses to write into it. The message offers a --break-system-packages flag. Do not use it for Jupyter. It turns off a guard that Homebrew put there deliberately, so your packages end up mixed with the Python packages Homebrew itself manages. And when Homebrew moves you to a new Python minor version, the packages stay behind in the old version’s site-packages and the new interpreter cannot see them. (We did not run an upgrade to demonstrate this. It follows from Python keeping one site-packages per minor version.)

Pick one of the routes below instead. For most people that means a venv. We only tested Homebrew’s Python here. We did not check whether a python.org install refuses in the same way.

Virtual environments isolate dependencies for each project and prevent package conflicts. They are lightweight, standard, and easy to automate. To install Jupyter inside a venv:

  1. Create and activate a virtual environment.

    python3 -m venv ~/.venvs/jupyter source ~/.venvs/jupyter/bin/activate
  2. Upgrade pip and install Jupyter.

    python -m pip install --upgrade pip python -m pip install jupyterlab notebook
  3. Launch Notebook (the jupyter command resolves to the copy inside the virtual environment).

    jupyter notebook

    On the test machine a clean install into a fresh venv gave the following (the two not installed lines, for ipywidgets and qtconsole, are left out):

    $ jupyter --version IPython : 9.17.1 ipykernel : 7.3.0 jupyter_client : 8.10.0 jupyter_core : 5.9.1 jupyter_server : 2.21.1 jupyterlab : 4.6.4 nbclient : 0.11.0 nbconvert : 7.17.1 nbformat : 5.11.1 notebook : 7.6.3 traitlets : 5.16.1

    ipykernel arrives as a dependency, so the environment gets its own python3 kernel without an extra install step.

  4. When you are done, deactivate the environment with deactivate. Reactivate it any time you need Notebook again by running source ~/.venvs/jupyter/bin/activate.

💡 Your new Jupyter still lists kernels from earlier installs. On the test machine, the fresh venv’s jupyter kernelspec list showed 8 kernels: its own python3, plus 7 left in ~/Library/Jupyter/kernels by earlier installs. Those seven are user-level and visible to every Jupyter on the machine. We counted them but did not launch them. A kernelspec whose command is a generic python may end up on the current interpreter, but one that names an absolute path to another environment starts that environment. If you pick one of those, imports will not see the packages in this venv. Check with jupyter kernelspec list, then look at the argv in each kernel.json. ModuleNotFoundError in Jupyter reproduces exactly that failure and shows how to check which interpreter a kernel starts.

Install with Conda (Anaconda or Miniconda)

Conda bundles Python, package management, and environment isolation. It is ideal if you work with data science libraries that ship Conda packages or if you prefer graphical installers.

  1. Install Miniconda  or the full Anaconda  distribution for macOS (Intel or Apple Silicon).

  2. Open a new Terminal window so that the conda command is on your PATH.

  3. Create an environment and add Jupyter:

    conda create --name notebooks python=3.11 conda activate notebooks conda install jupyterlab notebook
  4. Start Notebook with jupyter notebook. Because Conda environments are isolated, each environment can hold a different Python version or set of packages without clashing.

Install with Homebrew

Homebrew is the most popular package manager for macOS. Use it if you already rely on Brew to manage developer tools:

brew update brew install jupyterlab

Homebrew installs the jupyter command to /opt/homebrew/bin (Apple Silicon) or /usr/local/bin (Intel).

What the formula pulls in matters more than where it lands. Its metadata on 2026-09-28 (brew info --json=v2 jupyterlab; we read it, we did not install it):

formula jupyterlab 4.6.4 | deps: certifi, cffi, libyaml, node, pandoc, python@3.14, rpds-py, zeromq

So Homebrew’s JupyterLab runs on its own python@3.14, which is not necessarily the python3 you use in the terminal. Its bundled kernel most likely runs that Python too, but we did not install the formula to confirm it. Either way, a package you pip install into a project venv is not visible to it until you register that venv as a kernel. From inside the venv, run python -m pip install ipykernel if it is not already there, then python -m ipykernel install --user --name myproject.

The formula also depends on pandoc, which is one of the pieces PDF export needs. We have not checked whether the formula also includes the notebook interface, so to use jupyter notebook rather than JupyterLab, the venv route is the one verified above.

⚠️ Homebrew installs Jupyter system-wide. If you need multiple versions of Python or isolated dependencies, pair Brew with virtual environments or Conda instead.

JupyterLab Desktop for macOS

Project Jupyter maintains a desktop application that bundles JupyterLab with its own Python runtime. Download it from the JupyterLab Desktop release page  and drag the app into your Applications folder. After launching the app you can open or create notebooks without touching the command line. It still respects Conda environments or virtual environments if you connect them via the kernel selector.

This option is perfect for new users who prefer a GUI or teams that need a self-contained installation.

Choosing the right path

MethodWhen to use itNotes
pip (global)Not recommendedRefused by current Homebrew Python (tested: 3.13.1, externally-managed-environment); use venv or pipx.
pip + venvEveryday development, reproducible environmentsRecommended for most Python workflows; isolate dependencies per project.
CondaData science stacks, multiple Python versionsExcellent package availability and environment management.
HomebrewBrew-based toolchains, system administratorsBrings its own python@3.14; register project venvs as kernels to use their packages.
JupyterLab DesktopGUI-first users, sandboxed installsDrag-and-drop app with bundled Python runtime.

Whatever you choose, keep your environments tidy by periodically removing unused packages and pinning versions in a requirements.txt or environment.yml. Jupyter Notebook will feel right at home on your Mac once you do.

Next steps

© Runcell.RSS