Python 包策略

来自 Alpine Linux

Alpine Linux 中的 Python 软件包应遵循 APKBUILD 的通用标准集。

此材料正在进行中...

关于此方法的待定共识,正在讨论页上进行一些讨论
(最后编辑者:WhyNotHugo,于 2024 年 2 月 26 日。)

指南

  • Python 3 库应以 py3- 为前缀。程序(与库不同)完全不加前缀。

通用模板

请务必进行以下更改

  • 将维护者更新为您自己
  • 将 pkgname 设置为 Alpine 软件包名称(以“py3-”为前缀)
  • 将 _pyname(参见讨论页)设置为 PyPI 上软件包的名称
  • 更新版本号、pkgdesc、url 和许可证
  • 构建它并解决出现的任何问题
  • 阅读构建输出,并警惕以下部分中列出的问题 - 即使存在这些问题,构建也可能成功完成

软件包模板

# Maintainer: Joe Bloe <joe@example.org>
pkgname=py3-alpine-name
_pyname=pypi-name
pkgver=1.2.3
pkgrel=0
pkgdesc="Example Python package"
url="https://example.org"
arch="noarch"
license="MIT"
depends="python3"
makedepends="py3-setuptools"
_pypiprefix="${_pyname%${_pyname#?}}"
source="https://files.pythonhosted.org/packages/source/$_pypiprefix/$_pyname/$_pyname-$pkgver.tar.gz"
builddir="$srcdir/$_pyname-$pkgver"

build() {
	python3 setup.py build
}

check() {
	python3 setup.py test
}

package() {
	python3 setup.py install --root="$pkgdir" --skip-build
}

常见问题

没有可用的源软件包(PyPI 上只有 wheel 文件)

寻找上游源代码(例如 GitHub)并替换 URL。

PyPI 软件包中没有测试(“(0 tests run)”)

寻找上游源代码(例如 GitHub)并替换 URL。

setup.py test 下载大量依赖项

注意这一点,并务必将所有这些软件包添加到 checkdepends 中,以便 setuptools 不会下载和针对 aports 中不存在的软件包/版本进行测试。

上游使用 'tox' 运行测试

tox(打包为 py3-tox) 将所有依赖项下载到虚拟环境中。这绕过了系统软件包,从而否定了这些测试的许多价值。

您可以在 check() 阶段使用 tox 调用中的 --sitepackages,以便它使用系统软件包而不是将软件包下载到虚拟环境中。

setup.py 不存在

如果软件包使用 pyproject.toml 而不是 setup.py,您可以使用 py3-gpep517py3-installer。 请参阅 py3-rich 以获取示例。 另请注意该示例中如何针对构建的软件包运行测试。

许多项目需要 py3-poetry-core/py3-flit-core 或仅需要 py3-wheel/py3-setuptools 在 makedepends 中以及 py3-gpep517 一起才能成功构建(检查 pyproject.toml 中的 build-backend 以确认确切的要求)。

Alpine+Python 项目

aports 规范化项目

aports 中的许多 Python 软件包(如果不是大多数)不遵循这些指南。

待办事项:获得共识并组织这项工作。