Skip to content

How to Install Python and Setup Virtual Environments on macOS โ€‹

๐ŸŽซ Content is validated at 2025-06-20 for
โœ… macOS 14.2.1

Python is a versatile, high-level programming language that's widely used for web development, data science, automation, artificial intelligence, and more. While macOS comes with Python pre-installed, there are compelling reasons to install and manage your own Python versions.

The Native Python on macOS โ€‹

macOS comes with Python pre-installed, but there are some important things to know about this system Python:

sh
# Check the system Python version
python3 --version
# Output: Python 3.9.6 (or similar, depending on your macOS version)

# Check where it's installed
which python3
# Output: /usr/bin/python3

The system Python is primarily intended for macOS's internal use and has several limitations:

  • Outdated version: The system Python is often several versions behind the latest release
  • Limited permissions: Installing packages globally requires sudo and can potentially break system functionality
  • No version switching: You're stuck with whatever version Apple provides
  • Potential conflicts: System updates can modify or replace the Python installation

Why Install Another Python? โ€‹

Installing your own Python distribution gives you several advantages:

  1. Latest versions: Access to the newest Python features and security updates
  2. Multiple versions: Install and switch between different Python versions for different projects
  3. Safe package management: Install packages without affecting the system Python
  4. Better development experience: Full control over your Python environment
  5. Consistent deployment: Match your development environment with production systems

Best Practice: Using uv โ€‹

uv is an extremely fast Python package and project manager written in Rust. It's designed to replace multiple tools including pip, pip-tools, pipx, poetry, pyenv, virtualenv, and more. Here's why uv is the recommended choice:

  • ๐Ÿš€ Single tool: Replaces multiple Python tools with one unified interface
  • โšก๏ธ Speed: 10-100x faster than traditional tools like pip
  • ๐Ÿ Python management: Installs and manages Python versions seamlessly
  • ๐Ÿ—‚๏ธ Project management: Comprehensive project management with universal lockfiles
  • ๐Ÿ”ฉ Familiar interface: Includes a pip-compatible interface for easy migration

Installing uv โ€‹

The easiest way to install uv on macOS is using the official installer:

sh
curl -LsSf https://astral.sh/uv/install.sh | sh

Alternatively, you can install it with Homebrew:

sh
brew install uv

Or if you already have Python and pip installed:

sh
pip install uv

After installation, restart your terminal or run:

sh
source ~/.zshrc

Installing Python with uv โ€‹

Once uv is installed, you can easily install Python versions:

sh
# Install the latest Python version
uv python install

# Install specific Python versions
uv python install 3.12
uv python install 3.11
uv python install 3.10

# List available Python versions
uv python list

You can also set a default Python version for your system:

sh
# Set Python 3.12 as default
uv python pin 3.12

Understanding Virtual Environments โ€‹

A virtual environment is an isolated Python environment that allows you to install packages for specific projects without affecting other projects or the system Python. Think of it as a separate "sandbox" for each project.

Why We Need Virtual Environments โ€‹

  1. Dependency isolation: Different projects can use different versions of the same package
  2. Clean development: Avoid conflicts between project dependencies
  3. Reproducible builds: Ensure consistent environments across different machines
  4. Easy cleanup: Delete a virtual environment without affecting other projects
  5. Permission management: Install packages without requiring administrator privileges

For example, Project A might need Django 4.0, while Project B requires Django 5.0. Without virtual environments, these would conflict.

Setting Up Virtual Environments with uv โ€‹

uv makes virtual environment management incredibly simple and fast.

Creating a New Project โ€‹

The easiest way is to start with a new project:

sh
# Create a new Python project
uv init my-project
cd my-project

# This automatically creates a virtual environment and basic project structure

Working with an Existing Project โ€‹

For existing projects, you can create and manage virtual environments:

sh
# Create a virtual environment in the current directory
uv venv

# Create a virtual environment with a specific Python version
uv venv --python 3.12

# Create a virtual environment in a custom location
uv venv my-custom-env

Activating Virtual Environments โ€‹

sh
# Activate the virtual environment (traditional way)
source .venv/bin/activate

# Or use uv's built-in command runner (recommended)
uv run python --version
uv run python script.py

Installing Packages โ€‹

sh
# Add a package to your project (automatically manages virtual environment)
uv add requests
uv add django==5.0

# Install development dependencies
uv add --dev pytest black ruff

# Install from requirements.txt
uv pip install -r requirements.txt

# Run commands in the virtual environment
uv run python -m django startproject mysite

Managing Dependencies โ€‹

uv automatically creates and maintains a pyproject.toml file and a uv.lock file:

sh
# Sync dependencies (install/update packages according to lockfile)
uv sync

# Update all dependencies
uv lock --upgrade

# Show installed packages
uv pip list

Example Workflow โ€‹

Here's a complete example of setting up a new Python project:

sh
# Create a new project
uv init data-analysis-project
cd data-analysis-project

# Add dependencies
uv add pandas numpy matplotlib jupyter

# Create a Python script
echo "import pandas as pd; print('Hello Python!')" > analysis.py

# Run the script
uv run python analysis.py

# Start Jupyter notebook
uv run jupyter notebook

Alternative Installation Methods โ€‹

While uv is the recommended approach, here are other popular methods:

Option 1: Official Python Installer โ€‹

Download from python.org. This installs Python globally but doesn't provide version management.

Option 2: Homebrew โ€‹

sh
brew install [email protected]

Option 3: pyenv (Traditional Version Manager) โ€‹

sh
# Install pyenv
brew install pyenv

# Install Python versions
pyenv install 3.12.0
pyenv global 3.12.0

However, uv is generally faster and more comprehensive than these alternatives.

Summary โ€‹

  • macOS comes with Python, but it's better to install your own for development
  • uv is the recommended tool for Python and package management on macOS
  • Virtual environments are essential for isolating project dependencies
  • uv simplifies the entire Python development workflow with a single, fast tool
  • Start new projects with uv init and manage dependencies with uv add

With uv, you get a modern, fast, and comprehensive Python development experience that handles everything from Python installation to project management in one tool.