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 tellspip
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 forcespip
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)
- Go to pypi.org.
- Search for your package (e.g., "requests").
- 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 topackage>=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 topackage>=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 usingpython -m pip install --upgrade pip==<version>
.
By mastering version control with pip
, you gain greater control over your Python project dependencies.