背景
我正要尝试从GitHub下载的Python包,并意识到它没有setup.py,所以我无法安装它
pip install -e <folder>
相反,这个包有一个pyproject。Toml文件中似乎有与setup.py通常有非常相似的条目。
我发现
谷歌引导我进入PEP-518,它在基本原理部分对setup.py给出了一些评论。然而,它并没有清楚地说明应该避免使用setup.py,或者pyproject. py。Toml将完全取代setup.py。
问题
是pyproject。Toml是用来代替setup.py的?或者一个包应该两者都有,一个pyproject。Toml和setup.py?
如何使用pyproject安装项目?Toml处于可编辑状态?
pyproject。toml是新的统一的Python项目设置文件,它取代了setup.py。
可编辑安装仍然需要setup.py: import setuptools;setuptools.setup ()
使用pyproject。Toml,执行python -m PIP install。
然后,如果项目使用的是poetry而不是pip,你可以像这样安装依赖(到%USERPROFILE%\AppData\Local\pypoetry\Cache\virtualenvs中):
poetry install
然后运行依赖项,如pytest:
poetry run pytest tests/
预提交(使用.pre-commit-config.yaml):
poetry run pre-commit install
poetry run pre-commit run --all-files
这是干什么用的?
目前在Python社区中有多种流行的打包工具,虽然setuptools似乎仍然很流行,但它不再是事实上的标准。这种情况给最终用户和开发人员带来了许多麻烦:
For setuptools-based packages installation from source / build of a distribution can fail if one doesn't have setuptools installed;
pip doesn't support the installation of packages based on other packaging tools from source, so these tools had to generate a setup.py file to produce a compatible package. To build a distribution package one has to install the packaging tool first and then use tool-specific commands;
If package author decides to change the packaging tool, workflows must be changed as well to use different tool-specific commands.
pyproject。toml是PEP 517和PEP 518为解决这些问题而引入的新配置文件:
…想想为一个项目生成一个构建工件所需的(粗略的)步骤:
项目的源代码检出。
构建系统的安装。
执行构建系统。
这个PEP[518]涵盖了步骤#2。PEP 517涵盖步骤#3…
任何工具也可以用自己的部分(表)扩展这个文件,以接受特定于工具的选项,但这取决于它们,而不是必需的。
PEP 621建议使用pyproject。以静态的、与工具无关的方式指定包核心元数据。下表显示了当前支持该功能的后端:
它会取代setup.py吗?
对于基于setuptools的包,pyproject。Toml并不是严格意义上的替换setup.py,而是在仍然需要时确保它的正确执行。对于其他打包工具-是的,它是:
如果存在build-backend键,则优先使用它,并且源树遵循指定后端的格式和约定(因此,除非后端需要,否则不需要setup.py)。项目可能仍然希望包含一个setup.py,以便与不使用此规范的工具兼容。
如何在可编辑模式下安装包?
最初“可编辑安装”是setuptools特有的特性,因此PEP 517不支持它。后来PEP 660将这个概念扩展到使用pyproject.toml的包。
使用pip在可编辑模式下安装包有两种可能的条件:
现代的:
前端(pip)和后端都必须支持PEP 660。
PIP从版本21.3开始支持它;
遗留问题:
打包工具必须提供一个支持develop命令的setup.py文件。
从21.1版本开始,pip也可以在可编辑模式下仅使用setup.cfg文件安装包。
下表描述了各种后端对可编辑安装的支持:
只回答这一部分,其他人已经很好地解释了其他部分:
如何使用pyproject安装项目?Toml处于可编辑状态?
解决方案(工作)
Clone the project and run poetry install to created a normal installation of it first.
Get the path of the virtualenv that poetry has created using poetry env info -p. It will probably be something like <absolute path of your cloned project/.venv. Then check what is the path to site-packages directory inside it. It depends on your Python version and will be something like <absolute path of your cloned project/.venv/lib/python3.9/site-packages.
Create a .pth file inside this site-packages. It should contain a single line of text with the full path of the package to install in editable mode:
echo "<absolute path of your cloned project>" > "<absolute path of your cloned project/.venv/lib/python3.9/site-packages/package_name.pth"
适当的修复(截至2021年8月未实施)
2021年6月,PEP-660描述了pyproject的可编辑安装。基于tom的构建已经被接受。
在这个公共关系中,它对诗歌的实施正在进行中。
所以我们需要等待它完成,合并和一个新的诗歌版本发布。
来源
除了上面链接的那些,我的主要来源是“pip install -e”。等效?”-在github.com/python-poetry/poetry的第34期。
pyproject。toml是新的统一的Python项目设置文件,它取代了setup.py。
可编辑安装仍然需要setup.py: import setuptools;setuptools.setup ()
使用pyproject。Toml,执行python -m PIP install。
然后,如果项目使用的是poetry而不是pip,你可以像这样安装依赖(到%USERPROFILE%\AppData\Local\pypoetry\Cache\virtualenvs中):
poetry install
然后运行依赖项,如pytest:
poetry run pytest tests/
预提交(使用.pre-commit-config.yaml):
poetry run pre-commit install
poetry run pre-commit run --all-files