Skip to main content

How to Pip Install Specific Version of a Package (and Pip itself) in Python

Managing package versions is crucial for creating reproducible and stable Python environments. pip, Python's package installer, allows you to install specific versions of packages, not just the latest release. This is essential for ensuring compatibility, a_voiding breaking changes, or working with legacy code.

This guide explains how to use pip install to target specific package versions, manage existing installations, and even install a particular version of pip itself.

Why Install Specific Versions?

  • Reproducibility: Ensures that anyone setting up the project (or you, on a different machine/time) gets the exact same dependencies, leading to consistent behavior.
  • Stability: Prevents your project from breaking due to backward-incompatible changes in newer versions of dependencies.
  • Compatibility: A package might only work correctly with a specific version of another package or a particular Python version.
  • Bug Workarounds: You might need to pin to an older, stable version if a newer one has a critical bug affecting your project.

Installing a Specific Package Version

The == Operator

To install an exact version of a package, use two equals signs (==) followed by the version number.

# Install version 2.28.1 of the 'requests' package
pip install requests==2.28.1

# If using pip3 for Python 3
pip3 install requests==2.28.1

# If pip is not in PATH, or to specify Python version
python3 -m pip install requests==2.28.1
python -m pip install requests==2.28.1
py -m pip install requests==2.28.1 # for Windows

Make sure to replace requests and 2.28.1 with the actual package name and desired version.

Handling Existing Installations (--ignore-installed, --force-reinstall, or Uninstall First)

If you already have a different version of the package installed, pip might not change it unless you instruct it to.

  • Option 1: Uninstall then Install (Cleanest)
    pip uninstall <package-name>
    pip install <package-name>==<version>
  • Option 2: Use --ignore-installed This tells pip to install the specified version even if another version is already present (it will overwrite).
    pip install <package-name>==<version> --ignore-installed
  • Option 3: Use --force-reinstall This forces pip to reinstall the package, even if the specified version is already installed. It will re-download and re-install.
    pip install <package-name>==<version> --force-reinstall

Finding Available Package Versions

Using pip install <package-name>==

If you type pip install <package-name>== (with nothing after the ==) and press Enter, pip will usually list all available versions for that package found on PyPI.

pip install requests==
# (Press Enter. Pip will error but list versions in the error message)

Example output snippet:

ERROR: Could not find a version that satisfies the requirement requests== (from versions: 0.2.0, 0.2.1, ..., 2.28.0, 2.28.1, 2.28.2, ...)

Checking PyPI (Python Package Index)

  1. Go to pypi.org.
  2. Search for your package (e.g., "requests").
  3. On the package's page, click on the "Release history" tab in the sidebar. This lists all published versions with their release dates.

Using Version Specifiers (Beyond ==)

pip supports more flexible ways to specify versions in your requirements.txt file or directly on the command line (though for command line, direct == is common for a specific version).

  • Greater/Less Than or Equal To (>=, <=, >, <):

    pip install "requests>=2.25.0"          # Installs 2.25.0 or newer
    pip install "requests<3.0.0" # Installs any version less than 3.0.0
    pip install "requests>=2.25.0,<3.0.0" # Installs within a range

    (Note: On some shells, especially Windows, you might need to quote arguments containing <, >, etc.)

  • Compatible Release (~=): package~=1.4.2 is roughly equivalent to package>=1.4.2, ==1.4.* (it will install 1.4.2, 1.4.3, etc., but not 1.5.0). package~=1.4 is roughly equivalent to package>=1.4, ==1.*.

    pip install "requests~=2.28" # Installs 2.28.0, 2.28.1, etc., but not 2.29.0
  • Not Equal (!=):

    pip install "requests!=2.27.0"

These are more commonly used within requirements.txt files for defining acceptable version ranges.

Managing Versions with requirements.txt

For reproducible environments, list your project's dependencies with specific versions in a requirements.txt file:

# requirements.txt
requests==2.28.1
numpy==1.23.5
Flask>=2.0,<2.3

Then install all of them using:

pip install -r requirements.txt

To generate a requirements.txt file from your current environment:

pip freeze > requirements.txt

This captures the exact versions of all installed packages (including dependencies).

Best Practice: Virtual Environments

Always use virtual environments (e.g., created with venv) to manage dependencies for different projects. This isolates package versions and prevents conflicts between projects or with your system's global Python packages.

# Create a virtual environment
python3 -m venv myprojectenv

# Activate it
source myprojectenv/bin/activate # Linux/macOS
myprojectenv\Scripts\activate.bat # Windows (cmd.exe)
myprojectenv\Scripts\Activate.ps1 # Windows (PowerShell)

# Now, install your specific package versions within this environment
pip install requests==2.28.1

Installing a Specific Version of pip

You can also install a specific version of pip itself. This might be necessary if a newer pip version has issues or if you need to test with an older one. pip is just another package that can be managed by pip.

# Install a specific version of pip (e.g., 21.3.1)
python -m pip install --upgrade pip==21.3.1
# or
python3 -m pip install --upgrade pip==21.3.1

# Check available pip versions (similar to other packages)
python -m pip install pip==

The --upgrade flag is often used here to ensure the specified version is installed, potentially downgrading if a newer one is present.

Troubleshooting: Upgrading pip and setuptools

If you face issues with version specifiers or installations, ensure your pip and setuptools are up-to-date (unless you specifically need an older pip version):

python -m pip install --upgrade pip setuptools wheel

Conclusion

Installing specific versions of Python packages is crucial for stable and reproducible development environments.

  • Use pip install <package-name>==<version> to install an exact version.
  • Manage existing installations with options like --ignore-installed, --force-reinstall, or by uninstalling first.
  • Discover available versions by querying pip install <package-name>== or checking the package's PyPI page.
  • Use requirements.txt with pinned versions for project dependency management.
  • Always work within virtual environments.
  • You can even install a specific version of pip itself using python -m pip install --upgrade pip==<version>.

By mastering version control with pip, you gain greater control over your Python project dependencies.