-
Notifications
You must be signed in to change notification settings - Fork 241
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
packaging.tags.compatible_tags()
includes cpxx-none-any
tags if interpreter is provided
#511
Comments
Duplicate of #311 . Please read the full issue if you would like to consider submitting a PR to change the semantics. |
What version of pip are you using? For over two years now, pip has been using packaging.tags for determining platform tags. |
@pradyunsg - I'm using the latest pip, 22.0.3. It makes use of a vendored packaging.tags but it doesn't call I'll look into what a PR would take tomorrow, but my question remains about why this apparent disparity exists between what pip will install and what packaging.tags.sys_tags() returns. This manifests for me as pyxll installing fine with pip but not with poetry. Maybe that's a bug in poetry (i.e. maybe it should be doing what pip does rather than calling |
Would a PR that makes |
Actually, from a quick scan I can't immediately see why |
It's an inconsistency and not strictly a bug with anyone. Wheel tags are only standardized so far as their format and some basic details. But support for e.g. As mentioned in the issue I linked to, we can update I would also question why pyxll has such wheels? What are they doing which makes them reliant on CPython but not on the ABI? Unfortunately they don't have an issue tracker we can ask on. |
If you can post the output of |
packaging.tags.sys_tags()
doesn't include cpxx-none-any
tagspackaging.tags.compatible_tags()
includes cpxx-none-any
tags if interpreter is provided
The issue here is that pip always calls |
pip has that logic because we’ve historically had a —platform and flags like that, in the CLI. I don’t think that logic is particularly useful for other clients, who don’t need that sort of overrides. |
The source of the difference is that when pip calls Would a PR that makes I don't have any insight into pyxll as it's closed source, unfortunately. It looks like they've had a single cpxx-none-any wheel for years. My best guess is they build a single wheel that requires cpython but works on both 32- and 64-bit Windows. If so, maybe that should be two wheels. It doesn't work on non-Windows platforms. |
Ah, missed your reply @pradyunsg - hadn't refreshed while I was writing mine. We found the same thing. So your position is that this should be raised as an issue with pip, and that they should drop cp39-none-any, breaking pyxll? If so I'll raise an issue. Might be nice to tell the pyxll folks about it... |
Hmm, are you sure pip only started accepting these wheels with #466? That was in october 2021, but pypi has pyxll packages going back to 2020 that have (only) cpxx-none-any wheels: https://pypi.org/project/pyxll/4.5.1/#files |
Pip 20.2, from before that change, does appear able to install pyxll
|
What's the output of pip debug (or get_compatible_tags, if the debug command wasn't added) then? |
Well, let's move the rest of the discussion to pip's issue tracker. @tom-bowles Would you be willing to file a bug report against pip for this? |
@pradyunsg Yes - will do later today. |
Closes #511 See pypa/pip#10923 for motivation. Co-authored-by: Brett Cannon <brett@python.org>
Closes pypa#511 See pypa/pip#10923 for motivation. Co-authored-by: Brett Cannon <brett@python.org>
Pyxll is published with a
cp39-none-any
wheel, which pip installs successfully with cpython 3.9 on windows.packaging.tags.sys_tags()
doesn't include that tag. (The practical impact of which, for me, is that I can't install pyxll using poetry, which usespackaging.tags.sys_tags()
to check wheel compatibility).Pip has
TargetPython.get_tags()
, which gives the following for meWhereas packaging.tags.sys_tags() gives
The only difference is the absence of
cp39-none-any
. Should those be the same? Pip makes use of packaging.tags, so should it usesys_tags()
or is there a reason for the different implementation?The text was updated successfully, but these errors were encountered: