You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加pyproject.toml后,pkg_resources.get_distribution返回路径异常如何兼容?

解决pyproject.toml导致可编辑安装路径变更的兼容问题

当你给项目添加空的pyproject.toml后,执行可编辑安装(py -3 -m pip install -e <path_to_my_project>)时,pkg_resources.get_distribution('my-project')返回的包路径从项目源码目录变成了Python的site-packages目录,这是因为pip的构建系统回退行为发生了变化。

解决方案

在你的pyproject.toml中添加以下配置,明确指定使用setuptools作为构建系统,就能恢复之前的可编辑安装行为:

[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"

添加后重新执行可编辑安装命令,pkg_resources.get_distribution就会再次返回项目源码目录的路径,和添加pyproject.toml之前的行为一致。

原因说明

  • 没有pyproject.toml时,pip默认直接执行setup.py,用旧逻辑处理可编辑安装,直接关联到项目源码目录。
  • 添加空pyproject.toml后,pip会启用PEP 517/518的构建流程,此时pip会使用一套默认的构建系统配置,但这套默认配置的可编辑安装逻辑和旧版存在差异,导致包路径指向site-packages。
  • 手动指定[build-system]配置后,pip会使用标准的setuptools构建后端,和原来直接执行setup.py的行为对齐,保证兼容性。

官方文档回退行为翻译

如果pyproject.toml中没有[build-system]部分,pip会回退到旧的构建行为:直接执行setup.py,不使用PEP 517构建后端。

如果pyproject.toml存在但[build-system]部分缺失,pip会使用以下默认的构建系统配置:

[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta:__legacy__"

这个默认配置使用setuptools的遗留后端,但它的可编辑安装行为和直接执行setup.py的旧逻辑存在差异,这就是你遇到路径变化的核心原因。

内容的提问来源于stack exchange,提问作者piotrek204

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:20:21