Skip to content

pip freeze vs. pip list: Understanding the Differences

How pip freeze generates exact package versions for requirements.txt to recreate Python environments, while pip list displays all installed packages and dependencies in a readable format.

Both pip freeze and pip list are essential commands for managing Python packages, but they serve distinct purposes.

This guide clarifies the differences between pip freeze and pip list, explaining when and why you'd use each one, and how they relate to virtual environments and requirements.txt files.

pip freeze

pip freeze is primarily used to output a list of installed packages in a format that can be used to recreate the environment. This is crucial for reproducibility and sharing your project's dependencies.

Generating requirements.txt

The most common use of pip freeze is to generate a requirements.txt file:

pip freeze > requirements.txt
pip3 freeze > requirements.txt

This command redirects the output of pip freeze into a file named requirements.txt. This file can then be used to install the exact same package versions on another system or in a new environment:

pip install -r requirements.txt
pip3 install -r requirements.txt

Output Format

The output of pip freeze is in the format package_name==version, which is the format pip expects for specifying package versions during installation. Example:

requests==2.28.1
urllib3==1.26.12
certifi==2022.9.24

Dependencies

By default, pip freeze lists only the top-level packages you've explicitly installed. If you installed requests, it will not list urllib3 or certifi separately (even though requests depends on them), unless you've also installed them directly with pip install.

Using --all option

You can include packages such as pip, wheel, and setuptools in the output by calling pip freeze with --all option:

pip freeze --all

pip list

pip list shows all installed packages in the current environment, including those installed as dependencies, in a more human-readable, tabular format. It's for inspecting the environment, not for recreating it.

pip list
pip3 list

Output Format

Package         Version
--------------- -------
certifi         2022.9.24
pip             22.0.4
requests        2.28.1
setuptools      58.1.0
urllib3         1.26.12
wheel           0.37.1

pip list displays a table with Package names and their versions.

Key Differences Summarized

Feature pip freeze pip list
Purpose Generate a list of installed packages suitable for recreating the environment (usually in a requirements.txt file). List all installed packages in a human-readable format.
Output package==version format Tabular format: Package Version
Dependencies Shows only top-level packages (those directly installed), not all dependencies unless explicitly installed. Shows all installed packages, including dependencies and editable installs.
Use Case Creating requirements.txt files; sharing project dependencies; creating reproducible environments. Inspecting the current environment; seeing what's installed, including dependencies.

Virtual Environments: Best Practice

It's strongly recommended to use virtual environments with both pip freeze and pip list. This isolates your project's dependencies and avoids conflicts.

python3 -m venv venv  # Recommended

python -m venv venv

py -m venv venv

source venv/bin/activate

venv\Scripts\activate.bat

venv\Scripts\Activate.ps1

pip freeze > requirements.txt
pip list
  • Create a virtual environment and activate it using the correct command for your operating system.
  • The pip freeze and pip install commands are then executed in the virtual environment.

Conclusion

pip freeze and pip list are both valuable tools for managing Python packages.

  • pip freeze is essential for creating reproducible environments by generating requirements.txt files
  • pip list gives you a complete overview of your current environment.

Always use virtual environments to isolate your project dependencies and avoid conflicts.

Navigation