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
变体。