-
-
Notifications
You must be signed in to change notification settings - Fork 309
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
"ValueError: At least one file selection option must be defined" error with hatchling-v1.19.0 #1113
Comments
Yes, this is mentioned in the changelog: https://github.com/pypa/hatch/releases/tag/hatchling-v1.19.0.
File selection options are documented here: https://hatch.pypa.io/latest/config/build/#file-selection I'm wondering what exact rules apply, though. urllib3 does not seem to be affected as it defines |
This is specifically for the wheel target. Previously if projects were building wheels successfully then you were hitting the fall back and basically including every Python file found that doesn't look like a test file. That I think is undesirable which is why there is now an error. I will keep this open and improve that message to indicate that issue is specific to wheel config. |
@ofek Users are hitting this when using my Should I adapt the plugin? |
Does the source directory exist? |
Yes all the source directories I add in the |
Do you have an example traceback? |
Sure here it is:
|
Unless I'm misunderstanding, it looks like that is a valid error and has nothing to do with your plugin. What am I missing? FYI for everyone here, this behavior changed due to multiple requests one of which was this: #992 |
The error appeared with hatchling 1.19. My point is that I have no file selection option that I can provide in pyproject.toml since all the file selection is done by the hatch-odoo plugin. |
We eventually need to update build settings to adjust to pypa/hatch#1113.
I see. So the fix (for your particular case) would be to prevent this check if a plugin does provide forced inclusion patterns, is that right? I plan to fix this and release today so I want to be sure. |
@ofek, yes that sounds good. Note however that I tried to add this to my config as a workaround and it still fails with the same error, there might be something else at play:
|
We're also hitting this with Sphinx Lint: ❯ git clone https://github.com/sphinx-contrib/sphinx-lint && cd sphinx-lint
...
❯ pip install -e .
Obtaining file:///private/tmp/sphinx-lint
Installing build dependencies ... done
Checking if build backend supports build_editable ... done
Getting requirements to build editable ... done
Preparing editable metadata (pyproject.toml) ... error
error: subprocess-exited-with-error
× Preparing editable metadata (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [39 lines of output]
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 167, in prepare_metadata_for_build_editable
hook = backend.prepare_metadata_for_build_editable
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: module 'hatchling.build' has no attribute 'prepare_metadata_for_build_editable'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
main()
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
json_out['return_val'] = hook(**hook_input['kwargs'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 176, in prepare_metadata_for_build_editable
whl_basename = build_hook(metadata_directory, config_settings)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/p6/lf2s1s5d4kb335g2n1td8z8c0000gn/T/pip-build-env-z5yx9mlz/overlay/lib/python3.12/site-packages/hatchling/build.py", line 82, in build_editable
return os.path.basename(next(builder.build(directory=wheel_directory, versions=['editable'])))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/p6/lf2s1s5d4kb335g2n1td8z8c0000gn/T/pip-build-env-z5yx9mlz/overlay/lib/python3.12/site-packages/hatchling/builders/plugin/interface.py", line 155, in build
artifact = version_api[version](directory, **build_data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/p6/lf2s1s5d4kb335g2n1td8z8c0000gn/T/pip-build-env-z5yx9mlz/overlay/lib/python3.12/site-packages/hatchling/builders/wheel.py", line 423, in build_editable
return self.build_editable_detection(directory, **build_data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/p6/lf2s1s5d4kb335g2n1td8z8c0000gn/T/pip-build-env-z5yx9mlz/overlay/lib/python3.12/site-packages/hatchling/builders/wheel.py", line 434, in build_editable_detection
for included_file in self.recurse_selected_project_files():
File "/private/var/folders/p6/lf2s1s5d4kb335g2n1td8z8c0000gn/T/pip-build-env-z5yx9mlz/overlay/lib/python3.12/site-packages/hatchling/builders/plugin/interface.py", line 180, in recurse_selected_project_files
if self.config.only_include:
^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/p6/lf2s1s5d4kb335g2n1td8z8c0000gn/T/pip-build-env-z5yx9mlz/overlay/lib/python3.12/site-packages/hatchling/builders/config.py", line 774, in only_include
only_include = only_include_config.get('only-include', self.default_only_include()) or self.packages
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/p6/lf2s1s5d4kb335g2n1td8z8c0000gn/T/pip-build-env-z5yx9mlz/overlay/lib/python3.12/site-packages/hatchling/builders/wheel.py", line 231, in default_only_include
self.set_default_file_selection()
File "/private/var/folders/p6/lf2s1s5d4kb335g2n1td8z8c0000gn/T/pip-build-env-z5yx9mlz/overlay/lib/python3.12/site-packages/hatchling/builders/wheel.py", line 209, in set_default_file_selection
raise ValueError(message)
ValueError: At least one file selection option must be defined, see: https://hatch.pypa.io/latest/config/build/
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details. Similarly for It's fine with Hatchling 1.18. Sphinx Lint also uses hatch-vcs: https://github.com/sphinx-contrib/sphinx-lint/blob/main/pyproject.toml |
Adding this fixes it: [tool.hatch.build.targets.wheel]
packages = ["sphinx-lint"] |
I'm so sorry all of these errors are happening but it indicates to me that the users who asked for this were indeed correct and that people have been shipping wheels improperly in a subset of cases. In your case, the project name: does not match the directory name (no hyphen) so as a fallback it tries every Python file that does not look like a test. |
Ah right, so we actually need this without a hyphen to get wheels containing source and not just metadata: [tool.hatch.build.targets.wheel]
packages = ["sphinxlint"] Thanks, this now makes it create wheels identical to those with Hatchling 1.18. |
This adds the newly required sections to the hatchling build and making sure the right files get included in the wheel. See pypa/hatch#1113 for context.
Does the logic at least check for the common trivial case of |
Hatch now throws an error if files are not selected are not supplied to wheel. This commit includes all python files to satisfy the new condition. Read more: pypa/hatch#1113 Signed-off-by: Mike Szczys <[email protected]>
Hatch now throws an error if files are not selected are not supplied to wheel. This commit includes all python files to satisfy the new condition. Read more: pypa/hatch#1113 Signed-off-by: Mike Szczys <[email protected]>
Yes it does, the logic can be found here: https://github.com/pypa/hatch/blob/hatchling-v1.19.0/backend/src/hatchling/builders/wheel.py#L177-L209 |
Can you describe how to update the |
Yes certainly! The old behavior is: [tool.hatch.build.targets.wheel]
include = ["*.py"]
exclude = ["test*"] I'm embarrassed that I thought that was a good fallback. I kinda just copied what everyone else did for the fallback but in hindsight it should have always been an error to protect the user. The new recommendation is simply to define any inclusion options you want. The most common will be [tool.hatch.build.targets.wheel]
packages = ["src/foo"] Of course, in the majority of cases configuration is unnecessary because the project name would fuzzy match the directory name. |
This should really be called out in the documentation under the build config, specifically as a change. This was a breaking change, and should have been versioned as such. |
I do understand that viewpoint and I went back and forth on whether or not to ship a new major version. I decided not to based on two factors:
I do however understand that this sucks, and for that I am genuinely sorry. |
Part one of fixing this issue: #1119 The final second part is an actual bug fix to help with the plugin that was discussed above |
Real life example of the new error 🙂 https://github.com/python/docs-community/actions/runs/7177951476/job/19545271892?pr=93#step:4:171 |
Issue discussed here: pypa/hatch#1113 Also fixes the contents of builds!
because of pypa/hatch#1113 with no better workaround apparent
And fix editable installs, which have apparently been broken for us since the backwards-incompatible change to hatchling discussed in pypa/hatch#1113
The root cause is documented here: pypa/hatch#1113
The root cause is documented here: pypa/hatch#1113
Did hatchling-v1.19.0 introduce breaking changes? My project is suddenly failing to build with this error:
I tried the following workaround to revert the version to hatchling-v1.18.0, which fixed the error:
The text was updated successfully, but these errors were encountered: