如何在 pyproject.toml 的可编辑模式下使用 pip 安装包?

a_g*_*est 96 python pip setuptools python-poetry pyproject.toml

当一个项目仅通过via pyproject.toml(即没有文件)指定时setup.{py,cfg},如何以可编辑模式通过via pip(即python -m pip install -e .)安装它?

我尝试了setuptoolspoetry构建系统,但都不起作用:

[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
Run Code Online (Sandbox Code Playgroud)
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
Run Code Online (Sandbox Code Playgroud)

我在两个构建系统上都遇到相同的错误:

[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
Run Code Online (Sandbox Code Playgroud)

我在conda环境中使用它,以下是我的setuptools和版本pip

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
Run Code Online (Sandbox Code Playgroud)

Leo*_*ark 84

PEP 660 \xe2\x80\x93 基于 pyproject.toml 的构建的可编辑安装定义了如何构建仅使用pyproject.toml. 构建工具必须实现 PEP 660 才能使可编辑安装正常工作。您需要一个前端(例如pip \xe2\x89\xa5 21.3)和一个后端。一些流行后端的状态是:

\n\n

注意:为了能够对您的用户站点进行可编辑的安装 ( pip install -e --user),您需要安装v62.0.0 或更高版本的系统setuptools

\n

  • 我发现令人难以置信的是,“实现 PEP 660”似乎意味着“支持符合 PEP 660 的后端的前端”。实际上,前端和后端都需要。到目前为止,我能找到的唯一兼容的后端是 Flit。Poetry 的实现尚未发布。据我所知,[pip 只是一个前端](https://packaging-the-hard-way.readthedocs.io/en/latest/pep517.html?highlight=frontend#let-pip-build-the- distribution-for-you)似乎[setuptools尚未实现](https://github.com/pypa/setuptools/issues/2816)。 (7认同)
  • 自 [21.3](https://pip.pypa.io/en/stable/news/#v21-3) 起,Pip 支持从 `pyproject.toml` 文件进行可编辑安装 (6认同)
  • 也许 [_hatch_](https://pypi.org/project/hatch/)、[_pdm_](https://pypi.org/project/pdm/) 和 [_whey_](https://pypi.org/项目/乳清/) 可能在此列表中。据我所知,它们都与 PEP 660 兼容。 (4认同)
  • PEP 660 在 [poetry 1.0.8](https://github.com/python-poetry/poetry-core/releases/tag/1.0.8) 中实现 (3认同)
  • 感谢您的精彩概述和各种建议。最终我设法通过“flit”进行了可编辑安装。 (2认同)

J. *_*ner 67

当我搜索错误字符串“ (A "pyproject.toml" file was found, but editable mode currently requires a setuptools-based build.)”时,我偶然发现了这里

就我而言,我所需要做的就是更新 pip:

python3 -m pip install --upgrade pip
Run Code Online (Sandbox Code Playgroud)

然后安装就正常了。


wim*_*wim 24

注意:不再需要此解决方法。自v64.0.0 (2022 年 8 月)起,Setuptools 支持可编辑安装。对于出于某种原因坚持使用旧的 setuptools 版本的人们来说,旧的答案仍然在下面......

作为 setuptools 实现 PEP 660 ( #2816 )之前的临时解决方法,您可以创建一个空的安装文件,仅用于可编辑安装的目的。

touch setup.cfg
pip install -e .
rm setup.cfg
Run Code Online (Sandbox Code Playgroud)

注意:这实际上并没有调用任何build_editable钩子(目前在 setuptools 的后端中甚至不存在),而是触发 pip 中的代码路径,该路径创建一个临时文件setup.py,然后执行setup.py develop. 因此,这是一个“遗留”可编辑安装,通过在路径配置文件(如.venv/lib/python3.XY/site-packages/easy-install.pth. Poetry 和 flit 的做法类似,只是它们mypkg.pth在站点目录中创建单独的路径文件,而不是使用easy-install.pth.

因为setup.py develop是路径文件黑客,所以此类开发安装的常见注意事项适用,例如,它会公开源目录中恰好存在的任何 .py 文件,即使它们在创建版本时实际上并未打包到真正的发行版中。