-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Should manylinux1 comes before linux_* in precedence? #3844
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
Comments
I designed this tagging system and understand how it was intended to work. Putting manylinux1 first goes against the intent of the design, and has personally caused me problems in practice because a locally built wheel cannot override a broken remote manylinux1 wheel. Instead, manylinux1 has to be completely disabled to fix a problem with a pypi wheel. |
Later comment was edited to include rest of statement. |
In #3921 you have two pip core developers who are against putting generic linux wheels after the more specific manylinux1 wheels. You yourself in both the PEP, this issue and in #3921 state that the platform tags are intended to prefer the most specific to the least specific. Given that you did not design the The fact that wheel currently defaults to a more general tag when compiling on Linux does not magically mean that tag is somehow more specific. If you want a more specific tag to be used by the default, the suggest |
I'm describing a practical problem and I had not seen the recent PR resolution. It's discouraging to argue with you, and I usually step away from attempts to contribute to Python packaging for a while after doing so, so you won't have to worry about me for a while. A random machine id tag would be a different way to solve the same problem of selectively overriding broken pypi wheels, with its own workarounds for sharing wheels between similar machines. |
I agree this is a problem, and had offered two solutions in #3921 that would, in my opinion, solve it better, one that is automatic and allows a "zero configuration" approach and one which is opt-in and allows a "shared amongst many machines" approach. I believe these options are better because they don't involve making something that is logically less specific be considered more specific (and ontop of that, they remove the requirement to manage compatibility externally to pip). I believe that the only reason it's defensible at all to swap the order of these two things, is because generally people will put
I was going to just ignore this, but I don't think that's a very good thing to do. First off, I do not want anyone to feel discouraged to contributing to Python packaging. If you can point out what it is that I do (either here or privately is fine) that you find discouraging I can try to work on it. I suspect that it largely has to do with my own personal frustration over my perception that your solutions to problems and feature ideas tend to focus on expediency and what you think would be cool, rather than long term maintainability and an overall consistency of the related concepts. I don't know if that's how you actually think/view it or not, but that is how it comes across to me, and that frustrates me and I suspect that frustration might come out. |
That is a pretty good summary. You probably could not point to something I've done that is not the expedient solution. I like expedient solutions because I need a solution. From my point of view the roof is leaking and I have a tarp. Someone may eventually have to replace the roof, but in the meantime the tarp will prevent the house from rotting. Here's the problem: if tarps are not allowed, does that make it more likely that someone will repair the roof in time? Or will the house be destroyed? You consistently bet that the house will still exist by the time someone can afford to replace the roof, while I wonder why you want to destroy houses. The tarp is not the enemy of the roof. Without the tarp there will never be a new roof, because the house will be gone. |
@dstufft The most frustrating thing is feeling like I am not given the benefit of the doubt when discussing my own (successful) system. I understood it before writing it down. It is difficult for me to accept that others now understand the system better than I do after reading my imperfect prose, or just think that it is shit. On the other hand it is very understandable that the non-intuitive tagging system confuses people, I have been told repeatedly that it is hard to understand. For example, people expect that OSX version parsing should be a part of the wheel ranking algorithm instead of the supported tag generation code, but it works in the opposite way, because version parsing is complicated and set membership queries are fast. |
@dholth I have to admit that I always found the tagging and tag precedence system confusing, even back when I was working with you on the early wheel stuff. I recall a long debate we had over why consumers had to specify precisely what they wanted to accept, rather than saying what they "were" and having the matching algorithm check for a match. I never really felt comfortable with what we have - maybe because I didn't understand your intentions properly. With that in mind, I always assumed that I get the impression that most other people also use the analogy with the Windows tag and assume the Linux tag is intended as "generic" - sure, that makes it fairly useless in practice, that's the whole issue with Linux ABI incompatibilities. Given that is the case, maybe we should simply accept that the |
I'm OK with changing the #1 Linux tag now by a config option. The reconciliation with Windows is that two Windows machines are more similar than two Linux machines, win is more like manylinux1 than it is like generic Linux. Imagine trying hard enough and producing a binary that crashed unless Photoshop 4.3 was installed, except that is easy to do on Linux. Sometimes generic Linux binaries work but fail often enough that a pip user would rather wait for the compile than roll the dice on someone else's binary. |
I ran into the same problem today when I tried installing a wheel compiled locally using pip. Running pip install in verbose mode, I see : Local files found: /cvmfs/soft.computecanada.ca/custom/python/wheelhouse/generic/numpy-1.12.0-cp27-cp27mu-linux_x86_64.whl which makes no sense. It finds an acceptable link locally, it is the most recent version and yet retrieve the online version. |
Note that using some machine ID would not work. On HPC clusters, those would likely be different, yet the environment is the same and the local wheel should still be prefered. Letting one specify a prefered tag in the pip config would be best. |
This is a little outside my ballpark here but I'm willing to give this a shot at some point in the future -- given that #3921 is now outdated. I'll be more than happy to let someone who is more comfortable with the details and nuances of wheel tags take this up if I don't come around to this soon enough. :) |
I was surprised to see 'manylinux1' come first in pip.pep425tags.get_supported(). Would this cause pip to prefer a pypi-hosted manylinux1 wheel over a locally built linux_x86_64 wheel? I would expect the
'linux_x86_64' wheel to count as "more specific to the current system" and needing to come first.
Propose switching the order of each pair of elements in this list from pip.pep425tags.get_supported():
The text was updated successfully, but these errors were encountered: