# pip `pip` is Python’s **package manager**. It’s the tool you use to **install, upgrade, and remove Python libraries** that aren’t included in the standard library. Think of it like: * `apt` on Debian/Ubuntu * `dnf` on Fedora * `npm` for JavaScript ## What does pip do? With `pip`, you can: 1. **Install packages** ```bash pip install requests ``` 2. **Upgrade packages** ```bash pip install --upgrade requests ``` 3. **Uninstall packages** ```bash pip uninstall requests ``` 4. **List installed packages** ```bash pip list ``` 5. **Install from a requirements file** ```bash pip install -r requirements.txt ``` ## Where do packages come from? By default, pip downloads packages from **PyPI** (Python Package Index): * [https://pypi.org](https://pypi.org) * Contains **hundreds of thousands** of Python libraries * Example packages: `requests`, `numpy`, `flask`, `django`, `pandas` ## pip vs Python itself * **Python** → the programming language + standard library * **pip** → installs *extra* libraries written by the community Example: ```python import math # standard library (no pip needed) import requests # external library (installed via pip) ``` ## pip and Python versions On many systems: * `pip` → Python 2 or system default * `pip3` → Python 3 Safer way (recommended): ```bash python3 -m pip install requests ``` This ensures pip matches the Python version you’re using. ## Virtual environments `pip` works best with **virtual environments** ([venv](pages/requirement/venv.md)) to avoid breaking system Python: ```bash python3 -m venv venv source venv/bin/activate pip install flask ``` ## What is `requirements.txt`? `requirements.txt` is a **list of Python packages** (and versions) your project depends on. Example: ```txt flask==3.0.0 requests>=2.31.0 gunicorn ``` ## Install dependencies from `requirements.txt` ### Basic usage ```bash pip install -r requirements.txt ``` ### Safer (recommended) ```bash python3 -m pip install -r requirements.txt ``` This ensures pip matches your Python version. ## Use with a virtual environment (best practice) ```bash python3 -m venv venv source venv/bin/activate pip install -r requirements.txt ``` After activation, all packages go into `venv/`. ## Generate `requirements.txt` from current environment If you already installed packages: ```bash pip freeze > requirements.txt ``` ⚠️ This captures **everything** installed in the environment. ## Common version formats ```txt flask==3.0.0 # exact version (reproducible builds) requests>=2.31.0 # minimum version numpy~=1.26.0 # compatible release django<5.0 # version upper limit ``` ## Install from multiple requirement files ```bash pip install -r base.txt -r dev.txt ``` Useful for: * `base.txt` → production * `dev.txt` → development tools (pytest, black, etc.) ## Requirements from Git / local path ```txt git+https://github.com/pallets/flask.git -e . ``` Then install: ```bash pip install -r requirements.txt ``` ## Debian / system Python warning (important) On Debian-based systems, **don’t install globally** unless you know what you’re doing: ❌ Bad: ```bash sudo pip install -r requirements.txt ``` ✅ Good: ```bash python3 -m venv venv pip install -r requirements.txt ``` ## Typical workflow (TL;DR) ```bash python3 -m venv venv source venv/bin/activate pip install -r requirements.txt python app.py ```