PYPI.ECLASS

Section: eclass-manpages (5)
Updated: Apr 2024
Index Return to Main Contents

NAME

pypi.eclass - A helper eclass to generate PyPI source URIs

DESCRIPTION

The pypi.eclass can be used to easily obtain URLs for artifacts uploaded to PyPI.org. When inherited, the eclass defaults SRC_URI and S to fetch .tar.gz sdist. The project filename is normalized by default (unless PYPI_NO_NORMALIZE is set prior to inheriting the eclass), and the version is translated using pypi_translate_version.

If necessary, SRC_URI and S can be overridden by the ebuild. Two helper functions, pypi_sdist_url and pypi_wheel_url are provided to generate URLs to artifacts of specified type, with customizable URL components. Additionally, pypi_wheel_name can be used to generate wheel filename.

pypi_normalize_name can be used to normalize an arbitrary project name according to sdist/wheel normalization rules. pypi_translate_version can be used to translate a Gentoo version string into its PEP 440 equivalent.

SUPPORTED EAPIS

7 8

EXAMPLE

inherit pypi

SRC_URI="$(pypi_sdist_url "${PN^}" "${PV}")"
S=${WORKDIR}/${P^}

FUNCTIONS

pypi_normalize_name <name>
Normalize the project name according to sdist/wheel normalization rules. That is, convert to lowercase and replace runs of [._-] with a single underscore.

Based on the spec, as of 2023-02-10: https://packaging.python.org/en/latest/specifications/#package-distribution-file-formats

_pypi_translate_version <version>
Internal version translation function, returns the result via _PYPI_TRANSLATED_VERSION variable.
pypi_translate_version <version>
Translate the specified Gentoo version into the usual Python counterpart. Assumes PEP 440 versions.

Note that we do not have clear counterparts for the epoch segment, nor for development release segment.

pypi_sdist_url [--no-normalize] [<project> [<version> [<suffix>]]]
Output the URL to PyPI sdist for specified project/version tuple.

The `--no-normalize` option disables project name normalization for sdist filename. This may be necessary when dealing with distfiles generated using build systems that did not follow PEP 625 (i.e. the sdist name contains uppercase letters, hyphens or dots).

If <package> is unspecified, it defaults to ${PYPI_PN}. The package name is normalized according to the specification unless `--no-normalize` is passed.

If <version> is unspecified, it defaults to ${PV} translated via pypi_translate_version. If it is specified, then it is used verbatim (the function can be called explicitly to translate custom version number).

If <format> is unspecified, it defaults to ".tar.gz". Another valid value is ".zip" (please remember to add a BDEPEND on app-arch/unzip).

pypi_wheel_name [<project> [<version> [<python-tag> [<abi-platform-tag>]]]]
Output the wheel filename for the specified project/version tuple.

If <package> is unspecified, it defaults to ${PYPI_PN}. The package name is normalized according to the wheel specification.

If <version> is unspecified, it defaults to ${PV} translated via pypi_translate_version. If it is specified, then it is used verbatim (the function can be called explicitly to translate custom version number).

If <python-tag> is unspecified, it defaults to "py3". It can also be "py2.py3", or a specific version in case of non-pure wheels.

If <abi-platform-tag> is unspecified, it defaults to "none-any". You need to specify the correct value for non-pure wheels, e.g. "abi3-linux_x86_64".

pypi_wheel_url [--unpack] [<project> [<version> [<python-tag> [<abi-platform-tag>]]]]
Output the URL to PyPI wheel for specified project/version tuple.

The `--unpack` option causes a SRC_URI with an arrow operator to be generated, that adds a .zip suffix to the fetched distfile, so that it is unpacked in default src_unpack(). Note that the wheel contents will be unpacked straight into ${WORKDIR}. You need to add a BDEPEND on app-arch/unzip.

If <package> is unspecified, it defaults to ${PYPI_PN}.

If <version> is unspecified, it defaults to ${PV} translated via pypi_translate_version. If it is specified, then it is used verbatim (the function can be called explicitly to translate custom version number).

If <python-tag> is unspecified, it defaults to "py3". It can also be "py2.py3", or a specific version in case of non-pure wheels.

If <abi-platform-tag> is unspecified, it defaults to "none-any". You need to specify the correct value for non-pure wheels, e.g. "abi3-linux_x86_64".

ECLASS VARIABLES

PYPI_NO_NORMALIZE (SET BEFORE INHERIT)
When set to a non-empty value, disables project name normalization for the default SRC_URI and S values.
PYPI_PN ?= ${PN} (SET BEFORE INHERIT)
The PyPI project name. This should be overridden scarcely, generally when upstream project name does not conform to Gentoo naming rules, e.g. when it contains dots or uppercase letters.

Example use:

PYPI_PN=${PN/-/.}

AUTHORS

Michał Górny <mgorny@gentoo.org>

MAINTAINERS

Michał Górny <mgorny@gentoo.org>

REPORTING BUGS

Please report bugs via https://bugs.gentoo.org/

FILES

pypi.eclass

SEE ALSO

ebuild(5)
https://gitweb.gentoo.org/repo/gentoo.git/log/eclass/pypi.eclass


Index

NAME
DESCRIPTION
SUPPORTED EAPIS
EXAMPLE
FUNCTIONS
ECLASS VARIABLES
AUTHORS
MAINTAINERS
REPORTING BUGS
FILES
SEE ALSO

This document was created by man2html, using the manual pages.
Time: 03:27:01 GMT, April 25, 2024