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),所以最好包含星号
对于一个 python project,我想随包裹一起运送一个数据文件。
在 various
我的 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),所以最好包含星号