-
Notifications
You must be signed in to change notification settings - Fork 3.1k
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
Log tags used for candidate evaluation #6575
Conversation
Logged as debug so available only when --verbose option is used.
As mentioned on #4228 I have concerns that this might be a lot of output. Can you provide examples of output, to give an indication of how much extra output this adds? (I have a suspicion that OSX is one of the worst cases, so an example from there would be particularly valuable). |
https://gist.github.com/gar1t/3a3c761d16fc651828115787b33da6a6 Again, this is only displayed when It's also trivial to test this on any platform - just install something with |
Thanks, but as I said, it's OSX that's the bad case. See this posting under "Tag triple priority quirks", which claims that on OSX the list can be 515 entries long!
I'm not sure I like the argument "because there's so much output with |
We're talking about information that's critical to troubleshooting the problem "can't install this". If you don't want to provide via verbose output, what's the alternative? Are you proposing that you leave users without a single clue as to why they can't install a package? On the one hand, there's a well defined problem: can't possibly debug a critical problem related to installing a package. On the other: a hypothetical problem based on some notion of logging too much detail. If you'd like to close this PR based on the hypothetical problem of logging too much, please feel free. I don't have a macOS system to confirm or deny the claim that there could be 500+ tags. I'd just say that if there are for whatever reason 500+ tags and those are all used somehow in the candidate selection process, they need to be made available, period. I'll update #4228 with a link to a work around for anyone who needs the info. |
Can confirm what @pfmoore is saying. On my MacBook, running Mojave: >>> len(pip._internal.pep425tags.get_supported())
560 |
Well, sure. We'd like to expose this information but logging them in every run might not be the best way to do so. Exposing them via some CLI (and printing the number of tags in the verbose output, with a hint pointing to that option) is probably a better approach. Someone has to figure out what that CLI should look like though. |
You see that this information is being logged as debug right? These tags are printed along with kilobytes of link information. How is acceptable to log kilobytes of link information, with every skip decision made, and not okay to log tags? Answer: it's debug information. The point of logging this information at all is to help people understand what decisions pip is making, yes? If 560 tags are being used to decide whether a candidate is selected, all the more reason to log every last one! Is 560 it a big number? I have no basis for saying it's big or small. pip evaluates pages of links and prints them all along with each skip decision. Is that too much? What's the cut off? Does pip have a documented debug output usability standard that you're referencing or is this just your personal preference? It'd be nice for all of the uses frustrated by failed installs to know why you're withholding this essential information from the logs. Until you have someone in actual time and space objecting to tags being logged, that's not a problem that needs to be solved. In the meantime, pip, the tool everyone uses to install Python packages, fails to install software in certain cases and does not make available the information needed to resolve the issue. If you'd like to add another command to get this information, this issue will remain opened until a) you complete your consensus building process b) someone implements the command, c) the implementation is vetted and tests pass, and d) the feature is released. How long? In the meantime, this trivial solution that's consistent with the way other DEBUG information is presented by the install command is available as a PR. I'm happy to fix any tests associated with it as a part of my responsibility as a contributor. If you'd prefer to close this, I understand and take no offense - it's just a proposal and I've made my case for it :) |
One trivial change that would mitigate the 560 problem (admittedly these lines could dominate the output) would be to simply format them on a single line. Another trivial change, though I think pointlessly complex and based entirely on personal aesthetics, which is a surprising point of view for debug output, would be to add an environment switch to print this information. I think this is a bad idea - it complicates the user experience for purely speculative reasons - but it's nonetheless something that would work, short of a new command. |
FWIW, I've not been opposed to this change and as it stands, it is an improvement over status quo. I just realized that I didn't state that and it'd have made things easier. :) And I saw that it's a logging.debug call. Thanks for clarifying none the less! What you've said makes sense to me and I'm okay to get this in. We can iterate on this, later once we have the bandwidth to figure out how to fully improve our logging situation. @pfmoore if you're okay with iterating on this in a later PR, let's merge this. :) |
Also, we'd likely want to add tests for this -- lemme know if you have any questions related to that. |
This does seem to have got out of hand. All I said was that I'd like to see output, as I think it's possibly going to look cluttered. But as a non-macOS user, I'm not really that bothered. I'm not looking to block it on the basis of a cluttered output. But yes, it should have some tests (if only to verify that the output is being produced with |
src/pip/_internal/index.py
Outdated
logger.debug("Valid tags:") | ||
with indent_log(): | ||
for tags in valid_tags: | ||
logger.debug(" ".join(tags)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A few comments on this: I would do this in a single debug log message, not use indent_log()
(since it's a single message), join on ', '
rather than a newline, and use the format_tag()
function added for this purpose and that is used elsewhere in index.py
for logging tags:
pip/src/pip/_internal/wheel.py
Lines 666 to 673 in 107258d
def format_tag(file_tag): | |
# type: (Tuple[str, ...]) -> str | |
""" | |
Format three tags in the form "<python_tag>-<abi_tag>-<platform_tag>". | |
:param file_tag: A 3-tuple of tags (python_tag, abi_tag, platform_tag). | |
""" | |
return '-'.join(file_tag) |
My two cents is that I think this would be better served by a
@pfmoore Since you asked, this is what the output would look like on my system (but with 378 tags rather than 560): Valid tags: cp36-cp36m-macosx_10_11_x86_64, cp36-cp36m-macosx_10_11_intel, cp36-cp36m-macosx_10_11_fat64, cp36-cp36m-macosx_10_11_fat32, cp36-cp36m-macosx_10_11_universal, cp36-cp36m-macosx_10_10_x86_64, cp36-cp36m-macosx_10_10_intel, cp36-cp36m-macosx_10_10_fat64, cp36-cp36m-macosx_10_10_fat32, cp36-cp36m-macosx_10_10_universal, cp36-cp36m-macosx_10_9_x86_64, cp36-cp36m-macosx_10_9_intel, cp36-cp36m-macosx_10_9_fat64, cp36-cp36m-macosx_10_9_fat32, cp36-cp36m-macosx_10_9_universal, cp36-cp36m-macosx_10_8_x86_64, cp36-cp36m-macosx_10_8_intel, cp36-cp36m-macosx_10_8_fat64, cp36-cp36m-macosx_10_8_fat32, cp36-cp36m-macosx_10_8_universal, cp36-cp36m-macosx_10_7_x86_64, cp36-cp36m-macosx_10_7_intel, cp36-cp36m-macosx_10_7_fat64, cp36-cp36m-macosx_10_7_fat32, cp36-cp36m-macosx_10_7_universal, cp36-cp36m-macosx_10_6_x86_64, cp36-cp36m-macosx_10_6_intel, cp36-cp36m-macosx_10_6_fat64, cp36-cp36m-macosx_10_6_fat32, cp36-cp36m-macosx_10_6_universal, cp36-cp36m-macosx_10_5_x86_64, cp36-cp36m-macosx_10_5_intel, cp36-cp36m-macosx_10_5_fat64, cp36-cp36m-macosx_10_5_fat32, cp36-cp36m-macosx_10_5_universal, cp36-cp36m-macosx_10_4_intel, cp36-cp36m-macosx_10_4_fat32, cp36-cp36m-macosx_10_4_universal, cp36-cp36m-macosx_10_3_fat32, cp36-cp36m-macosx_10_3_universal, cp36-cp36m-macosx_10_2_fat32, cp36-cp36m-macosx_10_2_universal, cp36-cp36m-macosx_10_1_fat32, cp36-cp36m-macosx_10_1_universal, cp36-cp36m-macosx_10_0_fat32, cp36-cp36m-macosx_10_0_universal, cp36-abi3-macosx_10_11_x86_64, cp36-abi3-macosx_10_11_intel, cp36-abi3-macosx_10_11_fat64, cp36-abi3-macosx_10_11_fat32, cp36-abi3-macosx_10_11_universal, cp36-abi3-macosx_10_10_x86_64, cp36-abi3-macosx_10_10_intel, cp36-abi3-macosx_10_10_fat64, cp36-abi3-macosx_10_10_fat32, cp36-abi3-macosx_10_10_universal, cp36-abi3-macosx_10_9_x86_64, cp36-abi3-macosx_10_9_intel, cp36-abi3-macosx_10_9_fat64, cp36-abi3-macosx_10_9_fat32, cp36-abi3-macosx_10_9_universal, cp36-abi3-macosx_10_8_x86_64, cp36-abi3-macosx_10_8_intel, cp36-abi3-macosx_10_8_fat64, cp36-abi3-macosx_10_8_fat32, cp36-abi3-macosx_10_8_universal, cp36-abi3-macosx_10_7_x86_64, cp36-abi3-macosx_10_7_intel, cp36-abi3-macosx_10_7_fat64, cp36-abi3-macosx_10_7_fat32, cp36-abi3-macosx_10_7_universal, cp36-abi3-macosx_10_6_x86_64, cp36-abi3-macosx_10_6_intel, cp36-abi3-macosx_10_6_fat64, cp36-abi3-macosx_10_6_fat32, cp36-abi3-macosx_10_6_universal, cp36-abi3-macosx_10_5_x86_64, cp36-abi3-macosx_10_5_intel, cp36-abi3-macosx_10_5_fat64, cp36-abi3-macosx_10_5_fat32, cp36-abi3-macosx_10_5_universal, cp36-abi3-macosx_10_4_intel, cp36-abi3-macosx_10_4_fat32, cp36-abi3-macosx_10_4_universal, cp36-abi3-macosx_10_3_fat32, cp36-abi3-macosx_10_3_universal, cp36-abi3-macosx_10_2_fat32, cp36-abi3-macosx_10_2_universal, cp36-abi3-macosx_10_1_fat32, cp36-abi3-macosx_10_1_universal, cp36-abi3-macosx_10_0_fat32, cp36-abi3-macosx_10_0_universal, cp36-none-macosx_10_11_x86_64, cp36-none-macosx_10_11_intel, cp36-none-macosx_10_11_fat64, cp36-none-macosx_10_11_fat32, cp36-none-macosx_10_11_universal, cp36-none-macosx_10_10_x86_64, cp36-none-macosx_10_10_intel, cp36-none-macosx_10_10_fat64, cp36-none-macosx_10_10_fat32, cp36-none-macosx_10_10_universal, cp36-none-macosx_10_9_x86_64, cp36-none-macosx_10_9_intel, cp36-none-macosx_10_9_fat64, cp36-none-macosx_10_9_fat32, cp36-none-macosx_10_9_universal, cp36-none-macosx_10_8_x86_64, cp36-none-macosx_10_8_intel, cp36-none-macosx_10_8_fat64, cp36-none-macosx_10_8_fat32, cp36-none-macosx_10_8_universal, cp36-none-macosx_10_7_x86_64, cp36-none-macosx_10_7_intel, cp36-none-macosx_10_7_fat64, cp36-none-macosx_10_7_fat32, cp36-none-macosx_10_7_universal, cp36-none-macosx_10_6_x86_64, cp36-none-macosx_10_6_intel, cp36-none-macosx_10_6_fat64, cp36-none-macosx_10_6_fat32, cp36-none-macosx_10_6_universal, cp36-none-macosx_10_5_x86_64, cp36-none-macosx_10_5_intel, cp36-none-macosx_10_5_fat64, cp36-none-macosx_10_5_fat32, cp36-none-macosx_10_5_universal, cp36-none-macosx_10_4_intel, cp36-none-macosx_10_4_fat32, cp36-none-macosx_10_4_universal, cp36-none-macosx_10_3_fat32, cp36-none-macosx_10_3_universal, cp36-none-macosx_10_2_fat32, cp36-none-macosx_10_2_universal, cp36-none-macosx_10_1_fat32, cp36-none-macosx_10_1_universal, cp36-none-macosx_10_0_fat32, cp36-none-macosx_10_0_universal, cp35-abi3-macosx_10_11_x86_64, cp35-abi3-macosx_10_11_intel, cp35-abi3-macosx_10_11_fat64, cp35-abi3-macosx_10_11_fat32, cp35-abi3-macosx_10_11_universal, cp35-abi3-macosx_10_10_x86_64, cp35-abi3-macosx_10_10_intel, cp35-abi3-macosx_10_10_fat64, cp35-abi3-macosx_10_10_fat32, cp35-abi3-macosx_10_10_universal, cp35-abi3-macosx_10_9_x86_64, cp35-abi3-macosx_10_9_intel, cp35-abi3-macosx_10_9_fat64, cp35-abi3-macosx_10_9_fat32, cp35-abi3-macosx_10_9_universal, cp35-abi3-macosx_10_8_x86_64, cp35-abi3-macosx_10_8_intel, cp35-abi3-macosx_10_8_fat64, cp35-abi3-macosx_10_8_fat32, cp35-abi3-macosx_10_8_universal, cp35-abi3-macosx_10_7_x86_64, cp35-abi3-macosx_10_7_intel, cp35-abi3-macosx_10_7_fat64, cp35-abi3-macosx_10_7_fat32, cp35-abi3-macosx_10_7_universal, cp35-abi3-macosx_10_6_x86_64, cp35-abi3-macosx_10_6_intel, cp35-abi3-macosx_10_6_fat64, cp35-abi3-macosx_10_6_fat32, cp35-abi3-macosx_10_6_universal, cp35-abi3-macosx_10_5_x86_64, cp35-abi3-macosx_10_5_intel, cp35-abi3-macosx_10_5_fat64, cp35-abi3-macosx_10_5_fat32, cp35-abi3-macosx_10_5_universal, cp35-abi3-macosx_10_4_intel, cp35-abi3-macosx_10_4_fat32, cp35-abi3-macosx_10_4_universal, cp35-abi3-macosx_10_3_fat32, cp35-abi3-macosx_10_3_universal, cp35-abi3-macosx_10_2_fat32, cp35-abi3-macosx_10_2_universal, cp35-abi3-macosx_10_1_fat32, cp35-abi3-macosx_10_1_universal, cp35-abi3-macosx_10_0_fat32, cp35-abi3-macosx_10_0_universal, cp34-abi3-macosx_10_11_x86_64, cp34-abi3-macosx_10_11_intel, cp34-abi3-macosx_10_11_fat64, cp34-abi3-macosx_10_11_fat32, cp34-abi3-macosx_10_11_universal, cp34-abi3-macosx_10_10_x86_64, cp34-abi3-macosx_10_10_intel, cp34-abi3-macosx_10_10_fat64, cp34-abi3-macosx_10_10_fat32, cp34-abi3-macosx_10_10_universal, cp34-abi3-macosx_10_9_x86_64, cp34-abi3-macosx_10_9_intel, cp34-abi3-macosx_10_9_fat64, cp34-abi3-macosx_10_9_fat32, cp34-abi3-macosx_10_9_universal, cp34-abi3-macosx_10_8_x86_64, cp34-abi3-macosx_10_8_intel, cp34-abi3-macosx_10_8_fat64, cp34-abi3-macosx_10_8_fat32, cp34-abi3-macosx_10_8_universal, cp34-abi3-macosx_10_7_x86_64, cp34-abi3-macosx_10_7_intel, cp34-abi3-macosx_10_7_fat64, cp34-abi3-macosx_10_7_fat32, cp34-abi3-macosx_10_7_universal, cp34-abi3-macosx_10_6_x86_64, cp34-abi3-macosx_10_6_intel, cp34-abi3-macosx_10_6_fat64, cp34-abi3-macosx_10_6_fat32, cp34-abi3-macosx_10_6_universal, cp34-abi3-macosx_10_5_x86_64, cp34-abi3-macosx_10_5_intel, cp34-abi3-macosx_10_5_fat64, cp34-abi3-macosx_10_5_fat32, cp34-abi3-macosx_10_5_universal, cp34-abi3-macosx_10_4_intel, cp34-abi3-macosx_10_4_fat32, cp34-abi3-macosx_10_4_universal, cp34-abi3-macosx_10_3_fat32, cp34-abi3-macosx_10_3_universal, cp34-abi3-macosx_10_2_fat32, cp34-abi3-macosx_10_2_universal, cp34-abi3-macosx_10_1_fat32, cp34-abi3-macosx_10_1_universal, cp34-abi3-macosx_10_0_fat32, cp34-abi3-macosx_10_0_universal, cp33-abi3-macosx_10_11_x86_64, cp33-abi3-macosx_10_11_intel, cp33-abi3-macosx_10_11_fat64, cp33-abi3-macosx_10_11_fat32, cp33-abi3-macosx_10_11_universal, cp33-abi3-macosx_10_10_x86_64, cp33-abi3-macosx_10_10_intel, cp33-abi3-macosx_10_10_fat64, cp33-abi3-macosx_10_10_fat32, cp33-abi3-macosx_10_10_universal, cp33-abi3-macosx_10_9_x86_64, cp33-abi3-macosx_10_9_intel, cp33-abi3-macosx_10_9_fat64, cp33-abi3-macosx_10_9_fat32, cp33-abi3-macosx_10_9_universal, cp33-abi3-macosx_10_8_x86_64, cp33-abi3-macosx_10_8_intel, cp33-abi3-macosx_10_8_fat64, cp33-abi3-macosx_10_8_fat32, cp33-abi3-macosx_10_8_universal, cp33-abi3-macosx_10_7_x86_64, cp33-abi3-macosx_10_7_intel, cp33-abi3-macosx_10_7_fat64, cp33-abi3-macosx_10_7_fat32, cp33-abi3-macosx_10_7_universal, cp33-abi3-macosx_10_6_x86_64, cp33-abi3-macosx_10_6_intel, cp33-abi3-macosx_10_6_fat64, cp33-abi3-macosx_10_6_fat32, cp33-abi3-macosx_10_6_universal, cp33-abi3-macosx_10_5_x86_64, cp33-abi3-macosx_10_5_intel, cp33-abi3-macosx_10_5_fat64, cp33-abi3-macosx_10_5_fat32, cp33-abi3-macosx_10_5_universal, cp33-abi3-macosx_10_4_intel, cp33-abi3-macosx_10_4_fat32, cp33-abi3-macosx_10_4_universal, cp33-abi3-macosx_10_3_fat32, cp33-abi3-macosx_10_3_universal, cp33-abi3-macosx_10_2_fat32, cp33-abi3-macosx_10_2_universal, cp33-abi3-macosx_10_1_fat32, cp33-abi3-macosx_10_1_universal, cp33-abi3-macosx_10_0_fat32, cp33-abi3-macosx_10_0_universal, cp32-abi3-macosx_10_11_x86_64, cp32-abi3-macosx_10_11_intel, cp32-abi3-macosx_10_11_fat64, cp32-abi3-macosx_10_11_fat32, cp32-abi3-macosx_10_11_universal, cp32-abi3-macosx_10_10_x86_64, cp32-abi3-macosx_10_10_intel, cp32-abi3-macosx_10_10_fat64, cp32-abi3-macosx_10_10_fat32, cp32-abi3-macosx_10_10_universal, cp32-abi3-macosx_10_9_x86_64, cp32-abi3-macosx_10_9_intel, cp32-abi3-macosx_10_9_fat64, cp32-abi3-macosx_10_9_fat32, cp32-abi3-macosx_10_9_universal, cp32-abi3-macosx_10_8_x86_64, cp32-abi3-macosx_10_8_intel, cp32-abi3-macosx_10_8_fat64, cp32-abi3-macosx_10_8_fat32, cp32-abi3-macosx_10_8_universal, cp32-abi3-macosx_10_7_x86_64, cp32-abi3-macosx_10_7_intel, cp32-abi3-macosx_10_7_fat64, cp32-abi3-macosx_10_7_fat32, cp32-abi3-macosx_10_7_universal, cp32-abi3-macosx_10_6_x86_64, cp32-abi3-macosx_10_6_intel, cp32-abi3-macosx_10_6_fat64, cp32-abi3-macosx_10_6_fat32, cp32-abi3-macosx_10_6_universal, cp32-abi3-macosx_10_5_x86_64, cp32-abi3-macosx_10_5_intel, cp32-abi3-macosx_10_5_fat64, cp32-abi3-macosx_10_5_fat32, cp32-abi3-macosx_10_5_universal, cp32-abi3-macosx_10_4_intel, cp32-abi3-macosx_10_4_fat32, cp32-abi3-macosx_10_4_universal, cp32-abi3-macosx_10_3_fat32, cp32-abi3-macosx_10_3_universal, cp32-abi3-macosx_10_2_fat32, cp32-abi3-macosx_10_2_universal, cp32-abi3-macosx_10_1_fat32, cp32-abi3-macosx_10_1_universal, cp32-abi3-macosx_10_0_fat32, cp32-abi3-macosx_10_0_universal, py3-none-macosx_10_11_x86_64, py3-none-macosx_10_11_intel, py3-none-macosx_10_11_fat64, py3-none-macosx_10_11_fat32, py3-none-macosx_10_11_universal, py3-none-macosx_10_10_x86_64, py3-none-macosx_10_10_intel, py3-none-macosx_10_10_fat64, py3-none-macosx_10_10_fat32, py3-none-macosx_10_10_universal, py3-none-macosx_10_9_x86_64, py3-none-macosx_10_9_intel, py3-none-macosx_10_9_fat64, py3-none-macosx_10_9_fat32, py3-none-macosx_10_9_universal, py3-none-macosx_10_8_x86_64, py3-none-macosx_10_8_intel, py3-none-macosx_10_8_fat64, py3-none-macosx_10_8_fat32, py3-none-macosx_10_8_universal, py3-none-macosx_10_7_x86_64, py3-none-macosx_10_7_intel, py3-none-macosx_10_7_fat64, py3-none-macosx_10_7_fat32, py3-none-macosx_10_7_universal, py3-none-macosx_10_6_x86_64, py3-none-macosx_10_6_intel, py3-none-macosx_10_6_fat64, py3-none-macosx_10_6_fat32, py3-none-macosx_10_6_universal, py3-none-macosx_10_5_x86_64, py3-none-macosx_10_5_intel, py3-none-macosx_10_5_fat64, py3-none-macosx_10_5_fat32, py3-none-macosx_10_5_universal, py3-none-macosx_10_4_intel, py3-none-macosx_10_4_fat32, py3-none-macosx_10_4_universal, py3-none-macosx_10_3_fat32, py3-none-macosx_10_3_universal, py3-none-macosx_10_2_fat32, py3-none-macosx_10_2_universal, py3-none-macosx_10_1_fat32, py3-none-macosx_10_1_universal, py3-none-macosx_10_0_fat32, py3-none-macosx_10_0_universal, cp36-none-any, cp3-none-any, py36-none-any, py3-none-any, py35-none-any, py34-none-any, py33-none-any, py32-none-any, py31-none-any, py30-none-any |
I've updated the log entry to use a single line. I've inlined the formatting of the tag rather than import the function for something so trivial. Please point me to a test that asserts debug output for the install command, or something that I can easily adapt for this test. |
You can use the tests in To assert for debug output, you'll want to ensure it's not logged without |
Hello! I am an automated bot and I have noticed that this pull request is not currently able to be merged. If you are able to either merge the |
It looks like this functionality is now supported by the new debug command so I'll close this PR. If anyone wants to reopen, please feel free! And thanks for the swift intro of debug! |
Logged as debug so available only when --verbose option is used.