Is there any way to use the pyproject macros when setup.py isn't in the root directory?
I maintain a couple of packages where this is the case - one where there are actually two PyPI packages built from the same source package, and another where the Python package is in a subdirectory because it's bindings for a C library that is also built.
When I try, I get this error during build: + echo 'ERROR: Neither pyproject.toml nor setup.py found, consider using %pyproject_buildrequires -N <requirements-file> if this is not a Python package.' ERROR: Neither pyproject.toml nor setup.py found, consider using %pyproject_buildrequires -N <requirements-file> if this is not a Python package.
There aren't requirements files in the upstream packages. But I guess I could make a downstream one?
Thanks, Scott
Hi Scott
Scott Talbert via python-devel venit, vidit, dixit 2025-07-09 04:31:15:
Is there any way to use the pyproject macros when setup.py isn't in the root directory?
I maintain a couple of packages where this is the case - one where there are actually two PyPI packages built from the same source package, and another where the Python package is in a subdirectory because it's bindings for a C library that is also built.
When I try, I get this error during build:
- echo 'ERROR: Neither pyproject.toml nor setup.py found, consider using
%pyproject_buildrequires -N <requirements-file> if this is not a Python package.' ERROR: Neither pyproject.toml nor setup.py found, consider using %pyproject_buildrequires -N <requirements-file> if this is not a Python package.
There aren't requirements files in the upstream packages. But I guess I could make a downstream one?
You don't need to create pyproject.toml, and IIAC you shouldn't (rather suggest one upstream if needed). But note that setup.py serves two purposes:
- "script": `python setup.py build` etc, which is deprecated - "config": contains config "similar to pyproject.toml", not deprecated
You should be able to cd to the dir containing setup.py and call the macro there. You can do this multiple times for multiple subdirs.
It becomes more interesting when upstream calls `python setup.py build` as part of their all target in make. Work in progress ... (for notmuch).
Cheers Michael
On 09. 07. 25 4:31, Scott Talbert via python-devel wrote:
Is there any way to use the pyproject macros when setup.py isn't in the root directory?
I maintain a couple of packages where this is the case - one where there are actually two PyPI packages built from the same source package, and another where the Python package is in a subdirectory because it's bindings for a C library that is also built.
When I try, I get this error during build:
- echo 'ERROR: Neither pyproject.toml nor setup.py found, consider using
%pyproject_buildrequires -N <requirements-file> if this is not a Python package.' ERROR: Neither pyproject.toml nor setup.py found, consider using %pyproject_buildrequires -N <requirements-file> if this is not a Python package.
There aren't requirements files in the upstream packages. But I guess I could make a downstream one?
This is only useful when you want to use an exiting requirements file in a piece of software that is *not* a Python package. Which the macro thinks is your case, as it did not find a pyproject.toml or a setup.py file.
To locate the files, simply cd to the directory before using the macro.
%generate_buildrequires cd subdirectory %pyproject_buildrequires
%build ... cd subdirectory %pyproject_wheel
Note: Make sure not to use pushd or cd - without >&2 in %pyproject_buildrequires, as those commands put output on the stdout and all stdout is considered as generated BuildRequires.
On Wed, 9 Jul 2025, Miro Hrončok via python-devel wrote:
On 09. 07. 25 4:31, Scott Talbert via python-devel wrote:
Is there any way to use the pyproject macros when setup.py isn't in the root directory?
I maintain a couple of packages where this is the case - one where there are actually two PyPI packages built from the same source package, and another where the Python package is in a subdirectory because it's bindings for a C library that is also built.
When I try, I get this error during build:
- echo 'ERROR: Neither pyproject.toml nor setup.py found, consider using
%pyproject_buildrequires -N <requirements-file> if this is not a Python package.' ERROR: Neither pyproject.toml nor setup.py found, consider using %pyproject_buildrequires -N <requirements-file> if this is not a Python package.
There aren't requirements files in the upstream packages. But I guess I could make a downstream one?
This is only useful when you want to use an exiting requirements file in a piece of software that is *not* a Python package. Which the macro thinks is your case, as it did not find a pyproject.toml or a setup.py file.
To locate the files, simply cd to the directory before using the macro.
%generate_buildrequires cd subdirectory %pyproject_buildrequires
%build ... cd subdirectory %pyproject_wheel
Note: Make sure not to use pushd or cd - without >&2 in %pyproject_buildrequires, as those commands put output on the stdout and all stdout is considered as generated BuildRequires.
Thanks for these hints. This all worked.
The one thing - %pyproject_save_files can't work in the case of building multiple wheels in the same package, right?
Scott
On 10. 07. 25 2:45, Scott Talbert wrote:
The one thing - %pyproject_save_files can't work in the case of building multiple wheels in the same package, right?
Correct. As ow now, it has no API to say "save files from package X", so when multiple wheels are installed in %pyproject_install, we bail out and no longer allow %pyproject_save_files.
Obviously, this is somethign we could design, but the amount of such spec files in Fedora is rather low, and they can function with manual %file section.
On Thu, 10 Jul 2025, Miro Hrončok wrote:
On 10. 07. 25 2:45, Scott Talbert wrote:
The one thing - %pyproject_save_files can't work in the case of building multiple wheels in the same package, right?
Correct. As ow now, it has no API to say "save files from package X", so when multiple wheels are installed in %pyproject_install, we bail out and no longer allow %pyproject_save_files.
Obviously, this is somethign we could design, but the amount of such spec files in Fedora is rather low, and they can function with manual %file section.
Thanks, I agree, no need to design for such a limited use case.
Scott
python-devel@lists.fedoraproject.org