Skip to main content

pip Complete Guide: Installing, Managing, and Troubleshooting Python Packages

Created: October 28, 2019 Larry Qu 5 min read

Introduction

pip is Python’s package installer — the tool you use to install, upgrade, and manage third-party libraries. This guide covers everything from basic installation to virtual environments, dependency management, and troubleshooting. See Python Guide for more context. See Python Guide for more context. See Python Guide for more context.

Basic Commands

# Install a package
pip install requests

# Install a specific version
pip install requests==2.31.0

# Install minimum version
pip install "requests>=2.28.0"

# Install version range
pip install "requests>=2.28.0,<3.0.0"

# Upgrade a package
pip install --upgrade requests

# Uninstall a package
pip uninstall requests

# Uninstall without confirmation prompt
pip uninstall -y requests

Listing and Inspecting Packages

# List all installed packages
pip list

# List outdated packages
pip list --outdated

# Show package details (version, location, dependencies)
pip show requests

# Show package files
pip show --files requests

# Search PyPI (deprecated in newer pip, use pypi.org instead)
pip search requests

Requirements Files

Requirements files pin your dependencies for reproducible environments:

# Generate requirements.txt from current environment
pip freeze > requirements.txt

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

# Install from requirements.txt with exact versions
pip install -r requirements.txt --require-hashes

requirements.txt Format

## requirements.txt

requests==2.31.0
numpy>=1.24.0,<2.0.0
pandas~=2.0.0          # ~= means compatible release (>=2.0.0, <3.0.0)
flask                  # no version constraint (latest)
pytest>=7.0            # minimum version

## Install from Git

git+https://github.com/scrapy/scrapyd-client.git

## Install from local path

-e ./my-local-package

## Include another requirements file

-r base-requirements.txt

Separating Dev and Production Dependencies

## requirements.txt (production)

flask==3.0.0
sqlalchemy==2.0.0
psycopg2-binary==2.9.9

## requirements-dev.txt (development only)

-r requirements.txt
pytest==7.4.0
black==23.0.0
ruff==0.1.0
mypy==1.5.0
# Install production deps
pip install -r requirements.txt

# Install dev deps (includes production)
pip install -r requirements-dev.txt

Virtual Environments

Always use virtual environments to isolate project dependencies:

# Create a virtual environment
python3 -m venv .venv

# Activate (Linux/macOS)
source .venv/bin/activate

# Activate (Windows)
.venv\Scripts\activate

# Deactivate
deactivate

# Verify you're in the venv
which python  # should show .venv/bin/python
pip list      # shows only packages in this venv

.gitignore for Virtual Environments

## .gitignore

.venv/
venv/
env/
__pycache__/
*.pyc

Installing from Different Sources

# From PyPI (default)
pip install requests

# From a Git repository
pip install git+https://github.com/psf/requests.git

# From a specific branch/tag/commit
pip install git+https://github.com/psf/[email protected]
pip install git+https://github.com/psf/requests.git@main

# From a local directory (editable install — changes reflected immediately)
pip install -e ./my-package
pip install -e .  # install current directory as editable

# From a wheel file
pip install requests-2.31.0-py3-none-any.whl

# From a tarball
pip install requests-2.31.0.tar.gz

# From a URL
pip install https://example.com/packages/mypackage.tar.gz

pip Configuration

# Show current configuration
pip config list

# Set a configuration value
pip config set global.index-url https://pypi.org/simple/

# Use a different package index (e.g., company internal)
pip install mypackage --index-url https://internal.example.com/simple/

# Use an extra index alongside PyPI
pip install mypackage --extra-index-url https://internal.example.com/simple/

# Disable SSL verification (not recommended)
pip install requests --trusted-host pypi.org --trusted-host files.pythonhosted.org

pip.conf / pip.ini

# ~/.pip/pip.conf (Linux/macOS)
# %APPDATA%\pip\pip.ini (Windows)

[global]
index-url = https://pypi.org/simple/
timeout = 60
trusted-host = pypi.org
               files.pythonhosted.org

[install]
require-virtualenv = true  # refuse to install outside a venv

Dependency Resolution and Conflicts

# Check for dependency conflicts
pip check

# Install with verbose output to debug issues
pip install -v requests

# Force reinstall
pip install --force-reinstall requests

# Install without dependencies
pip install --no-deps requests

# Download packages without installing (for offline use)
pip download requests -d ./packages/
pip install --no-index --find-links ./packages/ requests

Modern Alternatives to pip

pip + venv (Standard)

The built-in combination — works everywhere, no extra tools needed.

pipenv

Combines pip and venv with a Pipfile for cleaner dependency management:

pip install pipenv
pipenv install requests
pipenv install pytest --dev
pipenv shell  # activate venv

Poetry

Modern dependency management with lock files and publishing:

pip install poetry
poetry new myproject
poetry add requests
poetry add pytest --group dev
poetry install
poetry shell

uv (Fastest — 2024+)

A Rust-based pip replacement that’s 10-100x faster:

pip install uv
uv pip install requests
uv pip install -r requirements.txt
uv venv

Troubleshooting

Permission Errors

# Don't use sudo with pip — use --user instead
pip install --user requests

# Or better: use a virtual environment
python3 -m venv .venv && source .venv/bin/activate
pip install requests

SSL Certificate Errors

# Upgrade pip and certifi
pip install --upgrade pip certifi

# If behind a corporate proxy
pip install requests --cert /path/to/corporate-cert.pem

pip Not Found

# Python 3
python3 -m pip install requests

# Ensure pip is installed
python3 -m ensurepip --upgrade

Dependency Conflicts

# See what's conflicting
pip check

# Create a fresh environment and install from scratch
python3 -m venv .venv-fresh
source .venv-fresh/bin/activate
pip install -r requirements.txt

Quick Reference

Command Description
pip install pkg Install latest version
pip install pkg==1.0 Install specific version
pip install -U pkg Upgrade package
pip uninstall pkg Remove package
pip list List installed packages
pip list --outdated Show outdated packages
pip show pkg Show package info
pip freeze > req.txt Export dependencies
pip install -r req.txt Install from file
pip install -e . Editable install
pip check Check for conflicts
pip download pkg Download without installing

Resources

Comments

Share this article

Scan to read on mobile

👍 Was this article helpful?