invalid requirement报错源于requirements.txt语法错误,包括混入--user等参数、-e路径格式错误、extras缺右括号;需逐行注释非包名行排查。

看报错信息里有没有 Invalid requirement
这类报错几乎都指向 requirements.txt 文件本身语法错误,不是网络或权限问题。常见诱因有三类:
-
--user、--trusted-host这类命令行参数被直接写进了requirements.txt—— 它只认包名和版本,不认任何--开头的东西 - 可编辑安装写成
e .或-E ./pkg,正确写法必须是-e ./pkg(小写 e,带连字符,后面空格隔开) - extras 语法漏了右括号,比如写成
requests[security而不是requests[security]
逐行检查文件,把所有非包名的行(尤其是以 # 以外字符开头的)先注释掉,再试一次。
报错含 missing pyproject.toml 怎么办
这是 pip 21.0+ 的硬性要求:只要 requirements.txt 里有 -e ./some_subdir,那个子目录就必须有 pyproject.toml。不是根目录缺,是子目录缺。
- 进到对应子目录,确认是否存在
pyproject.toml;不存在就新建一个最简版:[build-system] requires = ["setuptools>=45", "wheel"] build-backend = "setuptools.build_meta"
- 如果子目录路径写错了(比如拼错名、少写
./),pip 会报Invalid requirement: '-e ./xxx',而不是 missing 文件 -
pyproject.toml里不能有全角符号、BOM 头或未闭合的方括号,否则解析失败也会触发同类报错
报错提到 Constraints must be pinned versions
说明你用了 --constraint constraints.txt,但约束文件违反了“只能用 ==”的铁律。
-
constraints.txt里出现numpy>=1.24、pandas、<code>scipy~=1.10全部非法,必须改成numpy==1.24.4这种固定写法 - 即使
requirements.txt写的是numpy>=1.24,只要constraints.txt锁定为==1.24.4,pip 就会按约束装,不会报错 - 反过来,如果
constraints.txt锁的是numpy==1.24.4,但requirements.txt显式写了numpy==1.25.0,就会冲突报错
报错里有 PyGObject 或 mesonpy 相关失败
Windows + Python 3.12 环境下极大概率遇到。根本原因不是缺编译工具,而是 PyPI 上没有预编译 wheel,pip 自动 fallback 到源码构建,而 mesonpy 构建后端在该组合下无法加载。
- 优先尝试跳过它:
pip install -r requirements.txt --exclude PyGObject(如果你项目实际不依赖 GUI) - 若必须用,不要在 Windows 上硬刚,改用 WSL2 + Ubuntu + Python 3.11,或者降级到 Python 3.11(PyGObject 官方 wheel 支持到 3.11)
- 别信“装 Visual Studio Build Tools 就能解决”的说法——对 PyGObject 无效,它依赖的是 GObject Introspection 工具链,不是 MSVC
真正卡住的地方往往不是第一行报错,而是 pip 解析文件时发现某一行不符合规范,就直接停住不往下读了。所以别急着换源或升级 pip,先盯住报错里那句 Invalid requirement: 'xxx',定位到 requirements.txt 的具体行号,修它。











