|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
pyproject RPM macros
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
====================
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
This is a provisional implementation of pyproject RPM macros for Fedora 30+.
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
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).
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
Usage
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
-----
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
If your upstream sources include `pyproject.toml` and you want to use these macros, BuildRequire them:
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
BuildRequires: pyproject-rpm-macros
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
This will bring in python3-devel, so you don't need to require python3-devel explicitly.
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
In order to get automatic build dependencies on Fedora 31+, run `%pyproject_buildrequires` in the `%generate_buildrequires` section:
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
%generate_buildrequires
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
%pyproject_buildrequires
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
Only build dependencies according to [PEP 517] and [PEP 518] will be added.
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
All other build dependencies (such as non-Python libraries or test dependencies) still need to be specified manually.
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
Then, build a wheel in `%build` with `%pyproject_wheel`:
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
%build
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
%pyproject_wheel
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
And install the wheel in `%install` with `%pyproject_install`:
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
%install
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
%pyproject_install
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
Adding run-time and test-time dependencies
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
------------------------------------------
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
To run tests in the `%check` section, the package's runtime dependencies
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
often need to also be included as build requirements.
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
If the project's build system supports the [`prepare-metadata-for-build-wheel`
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
hook](https://www.python.org/dev/peps/pep-0517/#prepare-metadata-for-build-wheel),
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
this can be done using the `-r` flag:
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
%generate_buildrequires
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
%pyproject_buildrequires -r
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
For projects that specify test requirements using an [`extra`
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
provide](https://packaging.python.org/specifications/core-metadata/#provides-extra-multiple-use),
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
these can be added using the `-x` flag.
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
For example, if upstream suggests installing test dependencies with
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
`pip install mypackage[testing]`, the test deps would be generated by:
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
%generate_buildrequires
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
%pyproject_buildrequires -r -x testing
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
For projects that specify test requirements in their [tox] configuration,
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
these can be added using the `-t` flag followed by the tox environment.
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
For example, if upstream suggests running the tests on Python 3.7 with `tox -e py37`,
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
the test deps would be generated by:
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
%generate_buildrequires
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
%pyproject_buildrequires -t py37
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
Note that `-t` implies `-r`, because tox normally assumes the package is installed
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
including all the runtime dependencies.
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
The `-t` option uses [tox-current-env]'s `--print-deps-only` behind the scenes.
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
[tox]: https://tox.readthedocs.io/
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
[tox-current-env]: https://github.com/fedora-python/tox-current-env/
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
Limitations
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
-----------
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
48b8e40 |
`%pyproject_install` currently installs all wheels in `$PWD`. We are working on a more explicit solution.
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
162b0ca |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
This macro changes shebang lines of every Python script in `%{buildroot}%{_bindir}` to `#! %{__python3} %{py3_shbang_opt}` (`#! /usr/bin/python3 -s`).
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
We plan to preserve existing Python flags in shebangs, but the work is not yet finished.
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
Extras are currently ignored.
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
Some valid Python version specifiers are not supported.
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
03316d8 |
The `-x` flag does not yet support multiple (comma-separated) extras.
|
|
![](https://seccdn.libravatar.org/avatar/dcfe7af74d8d03d1a0ebd18962b3b8f18e13cfb21df46c214faa00e234336c40?s=16&d=retro) |
044c837 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
The `-t` flag does not yet support a reasonable default.
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
[PEP 517]: https://www.python.org/dev/peps/pep-0517/
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
fdf5116 |
[PEP 518]: https://www.python.org/dev/peps/pep-0518/
|