当项目通过pyproject.toml
(即没有setup.{py,cfg}
文件)指定仅时,如何通过pip
(即python -m pip install -e .
)以可编辑模式安装?
我尝试了setuptools
和poetry
的构建系统,但都没有工作:
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
我在两个构建系统中得到相同的错误:
ERROR: Project file:///tmp/demo has a 'pyproject.toml' and its build backend is missing the 'build_editable' hook. Since it does not have a 'setup.py' nor a 'setup.cfg', it cannot be installed in editable mode. Consider using a build backend that supports PEP 660.
我在conda
环境中使用这个,以下是我的setuptools
和pip
版本:
$ conda list | grep setuptools
setuptools 58.3.0 pypi_0 pypi
$ python -m pip --version
pip 21.3.1
PEP 660 -可编辑安装为pyproject。基于toml的构建定义了如何构建只使用pyproject.toml
的项目。构建工具必须实现PEP 660才能使可编辑安装工作。您需要一个前端(例如pip≥21.3)和一个后端。一些流行的后端状态如下:
- Setuptools实现PEP 660作为64版本。
- Flit从3.4版开始实现PEP 660。
- Poetry在1.0.8版本中实现了PEP 660。
注意:为了能够在用户站点(pip install -e --user
)上进行可编辑安装,您需要一个系统安装了setuptools
v62.0.0或更新版本。
我在这里绊倒了,因为我搜索错误字符串"(A "pyproject.toml" file was found, but editable mode currently requires a setuptools-based build.)
">
在我的例子中,我所需要做的就是更新pip:
python3 -m pip install --upgrade pip
安装工作正常
备注:不再需要此解决方案。自v64.0.0(2022年8月)以来,Setuptools支持可编辑安装。
作为setuptools实现PEP 660(#2816)之前的临时解决方案,您可以创建一个空的安装文件,仅用于可编辑的安装。
touch setup.cfg
pip install -e .
rm setup.cfg
注意:这实际上并没有调用任何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文件,即使它们在创建发行版时实际上没有打包到真正的发行版中。截至诗歌1.2.0b3, "当前项目";在运行poetry install
时,默认自动以可编辑模式安装。
$ pip uninstall virtualenv # or via apt if you installed that way
$ sudo apt install python3-dev python3-pip python3-setuptools
$ wget install.python-poetry.org -o get-poetry.py
$ python3 get-poetry.py --preview
$ cd /you/project/folder
$ poetry install
$ pip list
Package Version Editable project location
------------------ -------- -------------------------------------------
...
your-project 0.1.0 /you/project/folder
pip 22.2.2
...
找到一个很好的资源:
https://setuptools.pypa.io/en/latest/userguide/quickstart.html开发模式
pip install --editable .