2.8 KiB
pyproject RPM macros
This is a provisional implementation of pyproject RPM macros for Fedora 30+.
These macros are useful for packaging Python projects that use the PEP 517 pyproject.toml
file, which specifies the package's build dependencies (including the build system, such as setuptools, flit or poetry).
Usage
If your upstream sources include pyproject.toml
and you want to use these macros, BuildRequire them:
BuildRequires: pyproject-rpm-macros
This will bring in python3-devel, so you don't need to require python3-devel explicitly.
In order to get automatic build dependencies on Fedora 31+, run %pyproject_buildrequires
in the %generate_buildrequires
section:
%generate_buildrequires
%pyproject_buildrequires
Only build dependencies according to PEP 517 and PEP 518 will be added. All other build dependencies (such as non-Python libraries or test dependencies) still need to be specified manually.
Then, build a wheel in %build
with %pyproject_wheel
:
%build
%pyproject_wheel
And install the wheel in %install
with %pyproject_install
:
%install
%pyproject_install
Adding run-time and test-time dependencies
To run tests in the %check
section, the package's runtime dependencies
often need to also be included as build requirements.
If the project's build system supports the prepare-metadata-for-build-wheel
hook,
this can be done using the -r
flag:
%generate_buildrequires
%pyproject_buildrequires -r
For projects that specify test requirements using an extra
provide,
these can be added using the -x
flag.
For example, if upstream suggests installing test dependencies with
pip install mypackage[testing]
, the test deps would be generated by:
%generate_buildrequires
%pyproject_buildrequires -r -x testing
Limitations
%pyproject_install
currently installs all wheels in $PWD
. We are working on a more explicit solution.
This macro changes shebang lines of every Python script in %{buildroot}%{_bindir}
to #! %{__python3} %{py3_shbang_opt}
(#! /usr/bin/python3 -s
).
We plan to preserve existing Python flags in shebangs, but the work is not yet finished.
The PEPs don't (yet) define a way to specify test dependencies and test runners.
That means you still need to handle test dependencies and %check
on your own.
Extras are currently ignored.
Some valid Python version specifiers are not supported.
The -x
flag does not yet support multiple (comma-separated) extras.