APKBUILD 示例:Python

来自 Alpine Linux

许多 Python 包使用 setuptoolsdistutils 框架。这意味着与使用 make 的应用程序相比,build() 和 package() 部分看起来有点不同。

考量

pkgname

Python 的包名必须以 py3- 为前缀。

对于“可执行文件”(例如,blackbinwalk),通常不需要添加前缀。

对于用 Python 编写的工具和应用程序是否应该使用前缀,没有确切的规则,情况各异。

arch

noarch
用于纯 Python 包(即,没有编译代码)。
all(以及其他)
用于带有原生扩展(即,带有编译代码)的包。不要将 python3 添加到depends=(它通过动态链接到 python 库自动检测)。

source

大多数 Python 包都发布在 PyPI(Python 包索引)中。如果该包在 PyPI 中有可用的源 tarball(大多数包都是如此),并且它包含测试(有些包会明确地从 PyPI 中删除它们),您应该在source=中引用它,如

https://files.pythonhosted.org/packages/source/${_pyname%${_pyname#?}}/$_pyname/$_pyname-$pkgver.tar.gz

此处_pyname是 Python 包的真实名称。

否则,使用正常的上游 git tarball。

示例

pep517 调用

pkgname="py3-foo"
...
depends="py3-bar py3-baz"
makedepends="py3-gpep517 py3-setuptools py3-wheel python3-dev"
checkdepends="py3-pytest"
subpackages="$pkgname-pyc"
...

build() {
	gpep517 build-wheel \
		--wheel-dir dist \
		--output-fd 3 3>&1 >&2
}

check() {
	python3 -m venv --clear --system-site-packages testenv
	testenv/bin/python3 -m installer dist/*.whl
	testenv/bin/python3 -m pytest
}

package() {
	python3 -m installer -d "$pkgdir" \
		dist/*.whl
}

根据 pyproject.toml 中的 build-backend,您可能需要在构建时使用 py3-setuptools 或 py3-flit-core 或 py3-poetry-core 或 py3-hatchling。如果项目明确指定了 flitpoetry,请对其进行修补以使用 -core 变体。