从 setup.py 迁移到 pyproject.toml:如何指定包名称?

arn*_*rne 11 python setup.py pyproject.toml

我目前正在尝试将我们的内部项目从setup.py( pyproject.tomlPEP -518 ) 移走。如果可能的话,我不想使用构建后端特定的配置,即使我确实[build-system]通过require“ing”在该部分中指定了后端。

这些pyproject.toml文件或多或少是setup.py文件的直接翻译,元数据根据PEP-621设置,包括dependencies. 我们用于setuptools_scm确定版本,因此该version字段最终位于该dynamic部分中。

我们曾经在文件中设置packages参数,但我在 中找不到任何相应的字段,所以我干脆省略了它。setupsetup.pypyproject.toml

当使用 构建项目时python3 -m build .,我最终得到一个名为 的包UNKNOWN,即使我name[project]部分中设置了字段。看来这在构建的早期就中断了:

$ python -m build .
* Creating virtualenv isolated environment...
* Installing packages in isolated environment... (setuptools, setuptools_scm[toml]>=6.2, wheel)
* Getting dependencies for sdist...
running egg_info
writing UNKNOWN.egg-info/PKG-INFO
....
Run Code Online (Sandbox Code Playgroud)

我正在使用 python 3.8.11 和以下软件包:

build==0.8.0
distlib==0.3.4
filelock==3.4.1
packaging==21.3
pep517==0.12.0
pip==22.0.4
platformdirs==2.4.0
pyparsing==3.0.9
setuptools==62.1.0
six==1.16.0
tomli==1.2.3
virtualenv==20.14.1
wheel==0.37.1
Run Code Online (Sandbox Code Playgroud)

我的(缩写)pyproject.toml看起来像这样:

[project]
name = "coolproject"
dependencies = [
   'pyyaml==5.3',
   'anytree==2.8.0',
   'pytest'
]
dynamic = [
   "version"
]

[build-system]
requires = ["setuptools", "wheel", "setuptools_scm[toml]>=6.2"]

[tool.setuptools_scm]
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

arn*_*rne 3

将@AKX 的评论转化为答案,以便其他人可以更轻松地找到它。

问题可能是系统上过时的 pip/setuptools。显然,我的系统上的版本 19.3.1 无法安装可以正确处理 PEP621 元数据的 setuptools 版本。

您不能使用该指令从 pyproject.toml 中要求新的 pip build-system.requires

如果您无法更新系统 pip,您始终可以按用户安装:

pip install --user pip
Run Code Online (Sandbox Code Playgroud)

现在就可以走了。