What This Error Means
pip could not parse a requirement specifier (malformed version constraint, quotes/smart-quotes, comments, or an invalid line in a requirements file).
Read this as a precise clue about which part of the workflow broke first. Once you know the failing layer, the fix path gets much shorter.
How to Fix It
Fix invalid specifiers:use name==1.2.3 (pin) or name>=1.2,<2 (range).
If you need extras, quote the whole argument:python -m pip install "transformers[sentencepiece,torch]"
Remove or properly comment out lines in requirements files (comments must start with # at the beginning of the line or after whitespace).
If you're unsure what versions exist, search the package index or consult the package's release history, then pin a real version instead of words like latest.
Why It Happens
Usually this comes down to a requirement contains invalid version syntax (for example pip== with no version), a requirement line contains smart quotes (“ / ”) or mismatched quotes (common on Windows shells), a comment or placeholder like #todo is not formatted as a comment in the current context, or version constraints are malformed (for example mixing < and >= without a comma separator).
Verify the Fix
Re-run python -m pip install ... and confirm the Invalid requirement error is gone, and if using a requirements file, run python -m pip install -r requirements.txt and confirm it parses past the previously failing line.
Manual requirements parsing checks
If installing from a file, open it and find the exact line pip reports (run with -v to see more context).
Remove smart quotes and retype quotes using plain ASCII " or '.
If you copied a multiline command, ensure line continuations match your shell.
Examples
ERROR: Invalid requirement: 'pip==': Expected end or semicolon (after name and no valid version specifier)
ERROR: Invalid requirement: 'transformers[sentencepiece,torch]<4.26>=4.23.0': Expected end or semicolon (after version specifier)
ERROR: Invalid requirement: '#'
ERROR: Invalid requirement: "'transformers[torch]'": Expected package name at the start of dependency specifier
ERROR: Invalid requirement: "“isaacsim[all,extscache]==4.5.0”": Expected package name at the start of dependency specifier How pip parses requirement specifiers
This is the part worth understanding if the quick fix did not hold. It explains what pip is trying to do at the moment the error appears.
pip expects requirements in a specific format, such as name, name==version, name>=1.2,<2, or name[extra]==version.
If a requirement contains invalid syntax (like a trailing ==), smart quotes from copy/paste, or a malformed constraint line, pip fails fast with an Invalid requirement error.
Prevent It From Coming Back
Keep requirements files machine-generated when possible (constraints/lock tooling) and avoid manual editing mistakes.
Avoid smart quotes by copying commands from plain text sources.
Prefer one requirement per line with simple specifiers and commas between constraints (e.g. >= and <).
Docs and source code
github.com/pypa/pip/blob/25.3/src/pip/_internal/req/constructors.py
pip parses requirement strings and raises an InstallationError when a requirement can't be parsed ("Invalid requirement: ..."). - GitHub
def install_req_from_req_string(
req_string: str,
comes_from: InstallRequirement | None = None,
isolated: bool = False,
user_supplied: bool = False,
) -> InstallRequirement:
try:
req = get_requirement(req_string)
except InvalidRequirement as exc:
raise InstallationError(f"Invalid requirement: {req_string!r}: {exc}")