poetry icon indicating copy to clipboard operation
poetry copied to clipboard

fix: installer.no-binary/installer.only-binary :all: to lower priority

Open yokomotod opened this issue 9 months ago • 8 comments

Pull Request Check List

Resolves: #10231

  • [x] Added tests for changed code.
  • [x] Updated documentation for changed code.

Summary by Sourcery

Tests:

  • Adds tests to verify that installer.no-binary takes precedence over installer.only-binary when both are specified for a package.

yokomotod avatar Mar 15 '25 19:03 yokomotod

Reviewer's Guide by Sourcery

This pull request fixes an issue where the installer.only-binary configuration was taking precedence over the installer.no-binary configuration. The changes ensure that installer.no-binary always takes precedence when both configurations match a package. This was achieved by modifying the distribution selection logic and adding new test cases.

No diagrams generated as the changes look simple and do not need a visual representation.

File-Level Changes

Change Details Files
Ensured that the installer.no-binary configuration takes precedence over the installer.only-binary configuration when both match a package.
  • Modified the logic in choose_for to prioritize no_binary over only_binary when selecting a distribution.
  • Added test cases to verify the precedence of no_binary over only_binary in the test_chooser_only_binary_policy test.
  • Updated documentation to reflect the precedence of installer.no-binary over installer.only-binary.
src/poetry/installation/chooser.py
tests/installation/test_chooser.py
docs/configuration.md

Possibly linked issues

  • #10231: The PR implements the functionality requested in the issue.

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an issue from a review comment by replying to it. You can also reply to a review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull request title to generate a title at any time. You can also comment @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in the pull request body to generate a PR summary at any time exactly where you want it. You can also comment @sourcery-ai summary on the pull request to (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the pull request to resolve all Sourcery comments. Useful if you've already addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull request to dismiss all existing Sourcery reviews. Especially useful if you want to start fresh with a new review - don't forget to comment @sourcery-ai review to trigger a new review!
  • Generate a plan of action for an issue: Comment @sourcery-ai plan on an issue to generate a plan of action for it.

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

  • Contact our support team for questions or feedback.
  • Visit our documentation for detailed guides and information.
  • Keep in touch with the Sourcery team by following us on X/Twitter, LinkedIn or GitHub.

sourcery-ai[bot] avatar Mar 15 '25 19:03 sourcery-ai[bot]

And what if someone wants NO_BINARY=:all: ONLY_BINARY=some_package? Why is the proposed order of precedence better?

dimbleby avatar Mar 15 '25 20:03 dimbleby

And what if someone wants NO_BINARY=:all: ONLY_BINARY=some_package? Why is the proposed order of precedence better?

pip seems to have same precedence

$ pip install --dry-run --no-cache-dir --only-binary=requests --no-binary=:all: requests
Collecting requests
  Downloading requests-2.32.3.tar.gz (131 kB)

.......

Would install requests-2.32.3

yokomotod avatar Mar 15 '25 20:03 yokomotod

pip seems to have same precedence

poetry is not pip, pip is not a standard. Perhaps if you reported that example to pip, they'd treat it as a bug.

The question is: why is the proposed precedence better?

dimbleby avatar Mar 15 '25 20:03 dimbleby

I see.

The reason for this precedence is to achieve ONLY_BINARY=:all: NO_BINARY=some_package as described in #10231. We can use NO_BINARY as an exclusion of ONLY_BINARY=:all:.
I'm not sure of the motivation or use case of NO_BINARY=:all: ONLY_BINARY=some_package.
So, I think this precedence is more useful and better.

On the other hand, I agree that it's a bit weird that ONLY_BINARY=some_package NO_BINARY=some_package results in NO_BINARY=some_package.

If we don't care about pip, I think another option is to "lower the priority of :all:".
Then both ONLY_BINARY=:all: NO_BINARY=some_package and NO_BINARY=:all: ONLY_BINARY=some_package can work as exclusions, and obviously conflicted options like ONLY_BINARY=some_package NO_BINARY=some_package, ONLY_BINARY=:all: NO_BINARY=:all: keep the current behavior (failed to install).

What do you think?

yokomotod avatar Mar 15 '25 21:03 yokomotod

That sounds preferable to me, I would expect the treatment to be as near as possible symmetrical.

But I will say that this is not a feature I expect ever to use, so I am not personally especially invested either way

dimbleby avatar Mar 15 '25 21:03 dimbleby

@dimbleby changed to lower :all: precedence

yokomotod avatar Mar 15 '25 23:03 yokomotod

Deploy preview for website ready!

✅ Preview https://website-i6gqktb57-python-poetry.vercel.app

Built with commit 16bd8b31106c20f04d58af6f53d02c78d68fc84e. This pull request is being automatically deployed with vercel-action

github-actions[bot] avatar Mar 23 '25 16:03 github-actions[bot]

This pull request has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

github-actions[bot] avatar Sep 09 '25 00:09 github-actions[bot]