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:
- Latest versions: Access to the newest Python features and security updates
- Multiple versions: Install and switch between different Python versions for different projects
- Safe package management: Install packages without affecting the system Python
- Better development experience: Full control over your Python environment
- 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
- Dependency isolation: Different projects can use different versions of the same package
- Clean development: Avoid conflicts between project dependencies
- Reproducible builds: Ensure consistent environments across different machines
- Easy cleanup: Delete a virtual environment without affecting other projects
- 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 python@3.12
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 withuv 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.