Python 在 CI 服务器上找不到包数据

Python package-data not found on CI server

对于一个 python project,我想随包裹一起运送一个数据文件。 在 various advice on the mess that is Python package data 之后,我最终尝试了不同的东西,并通过以下设置让它在我的机器上本地工作。

我的 setup.cfg 包含此处不重要的其他内容

[options]
include_package_data = True

并且没有 package_data 或其他数据相关的键。我的MANIFEST.in状态

recursive-include lexedata clics3-network.gml.zip

我的 setup.py 很简单,本质上是

from setuptools import setup
readline = "readline"
setup(extras_require={"formatguesser": [readline]})

要加载文件,我使用

pkg_resources.resource_stream("lexedata", "data/clics3-network.gml.zip")

我使用 tox 测试这个,配置

[tox]
isolated_build = True
envlist = general
[testenv]
passenv = CI
deps =
  codecov
  pytest
  pytest-cov
commands =
  pytest --doctest-modules --cov=lexedata {envsitepackagesdir}/lexedata
  pytest --cov=lexedata --cov-append test/
  codecov

在我的本地机器上,当我 运行 pip install . 时,数据文件 lexedata/data/clics2-network.gml.zip 正确地存放在相应虚拟环境的 site-packages/lexeadata/data 目录中,并且 tox 将其打包在 .tox/dist/lexedata-1.0.0b3.tar.gz 及其 venv 站点包目录 .tox/general/lib/python3.8/site-packages/lexedata/data/.

但是,使用 Github 操作的持续集成在我正在测试的所有 Python 3 个版本上都失败了

UNEXPECTED EXCEPTION: FileNotFoundError(2, 'No such file or directory')
FileNotFoundError: [Errno 2] No such file or directory: '/home/runner/work/lexedata/lexedata/.tox/general/lib/python3.10/site-packages/lexedata/data/clics3-network.gml.zip'

相当于相同的 tox venv 路径。

这里可能出了什么问题?

您几乎做对了,尝试将您的 MANIFEST.in 稍微更新为以下任何示例:

  • include src/lexedata/data/*.zip
  • recursive-include src/* *.zip
  • recursive-include **/data clics3-network.gml.zip

正如您在 docs 中所见,include 命令将文件定义为相对于项目根目录的路径(这就是第一个示例从 src 开始的原因文件夹)

recursive-include 期望第一个参数是目录模式 (glob-style),所以最好包含星号