APKBUILD 示例:Python
许多 Python 包使用 setuptools 或 distutils 框架。这意味着与使用 make 的应用程序相比,build() 和 package() 部分看起来有点不同。
考量
pkgname
Python 库 的包名必须以 py3- 为前缀。
对于“可执行文件”(例如,black,binwalk),通常不需要添加前缀。
对于用 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。如果项目明确指定了 flit 或 poetry,请对其进行修补以使用 -core 变体。