我正在将一个旧的 python 项目迁移到新的
pyproject.toml
系统,但在获取安装测试所需的文件时遇到了问题。在pyproject.toml
里面我有:
[tool.setuptools]
package-data = {"my_pkg_name" = ["tests/*.sdf", "tests/*.urdf", "tests/*.xml", "tests/meshes/*.obj"]}
[build-system]
requires = ["setuptools>=43.0.0", "wheel"]
build-backend = "setuptools.build_meta"
使用
pytest
运行的测试需要 package-data
中描述的文件。在我构建并安装构建后,测试文件不存在。如何安装这些文件? How to include package data with setuptools/distutils? 可能是相关的,但事情已经改变了,我宁愿不必创建清单文件。
项目结构如下所示:
.
├── LICENSE.txt
├── pyproject.toml
├── README.md
├── src
│ ├── my_pkg_name
│ │ ├── __init__.py
└── tests
├── ant.xml
├── humanoid.xml
├── __init__.py
├── kuka_iiwa.urdf
├── meshes
│ ├── link_0.obj
│ ├── link_1.obj
│ ├── link_2.obj
│ ├── link_3.obj
│ ├── link_4.obj
│ ├── link_5.obj
│ ├── link_6.obj
│ └── link_7.obj
└── test_transform.py
pyproject.toml
没有具体的包发现相关设置。
对此进行更多研究,特别是:https://setuptools.pypa.io/en/stable/userguide/datafiles.html#non-package-data-files 我的问题是这些文件不是默认找到的包的一部分,它们只是
src
下的包。也不清楚是否应该安装测试文件——许多项目明确地将测试文件排除在安装之外。
要回答如何安装测试文件的原始问题, 解决方案是制作
tests
一个包(正如我上面已经拥有的),然后指定使用设置工具找到它,如下所示:
[tool.setuptools.packages.find]
where = ["src", "tests"]
[tool.setuptools.package-data]
"*" = ["*.sdf", "*.urdf", "*.xml", "*.obj"]
我相信 package-data 需要 setuptools >= 61 你可以这样指定:
[build-system]
requires = ["setuptools>=61.0.0", "wheel"]
build-backend = "setuptools.build_meta"