pytest 7 起已弃用 `py.path.local`(包括 `fspath` 参数),8.0 版本将彻底移除;虽非强制要求你项目中所有路径逻辑立即改用 `pathlib`,但测试框架内部路径接口已全面转向 `pathlib.path`,为保障兼容性与长期可维护性,迁移至 `pathlib` 是必要之举。
pytest 自 7.0 版本起正式开启从 py.path.local 到标准库 pathlib.Path 的迁移进程。核心变化在于:测试节点(如 Function、Class、Module)构造器中原本接受 fspath: py.path.local 的参数已被标记为废弃,取而代之的是统一要求传入 path: pathlib.Path 实例。你遇到的 PytestRemovedIn8Warning 正是这一过渡的关键信号——它并非仅影响 pytest 内部实现,更会波及任何显式依赖 py.path.local 或旧版路径对象(如通过 path.py 库创建的 path 对象)参与测试收集、插件开发或自定义 Item 构造的代码。
⚠️ 需明确:
- path.py 库本身未被 pytest 强制禁用,你仍可在测试逻辑中使用它做路径计算(如 Path(“data”) / “input.txt”);
- 但只要它被传递给 pytest 的 Node 构造函数(例如 pytest.Function.from_parent(…, fspath=…))、或被用作 pytest 插件钩子(如 pytest_collect_file)的返回路径对象,就会触发警告并在 pytest 8 中报错。
✅ 正确迁移实践示例: