Python 包策略
Alpine Linux 中的 Python 软件包应遵循 APKBUILD 的通用标准集。
![]() 关于此方法的待定共识,正在讨论页上进行一些讨论 |
指南
- 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-gpep517
和 py3-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 软件包(如果不是大多数)不遵循这些指南。
待办事项:获得共识并组织这项工作。