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).
How to Fix It
- Fix invalid specifiers: use
name==1.2.3(pin) orname>=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
- 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
#todois not formatted as a comment in the current context. - Version constraints are malformed (for example mixing
<and>=without a comma separator).
How to Verify
- Re-run
python -m pip install ...and confirm the Invalid requirement error is gone. - If using a requirements file, run
python -m pip install -r requirements.txtand 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
-vto 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.
Common CLI Output
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 specifierERROR: Invalid requirement: "“isaacsim[all,extscache]==4.5.0”": Expected package name at the start of dependency specifier How pip parses requirement specifiers
- pip expects requirements in a specific format, such as
name,name==version,name>=1.2,<2, orname[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.
Prevention Tips
- 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<).
Where This Can Be Triggered
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}")