I do think the resources that you’ve linked to in this thread are moving in a good direction, and it would be awesome to see more of that. I think such resources become immeasurably more useful if they are prominently placed as part of the documentation on python.org.
It seems to me there is a bit of a catch-22 in what many participants in these threads (especially some of the more knowledgeable “insiders”) think about the mission of PyPA and/or the Python distribution (by which I mean the stdlib and things like pip that, although not part of the stdlib, have some kind of official status with regard to Python). On the one hand, I do not see much uptake on the idea of dramatically expanding the scope of what Python provides out of the box. On the other hand, I also see reluctance to have python.org include documentation that is not about the tools that Python provides out of the box. This is the sentiment of “the documentation for tool X documents tool X, it’s not supposed to tell anyone how to decide whether to use that tool”.
The problem is that this kind of “how do I decide” documentation is exactly what is missing for many users. People can search the internet for something like “how to install a Python library” and find various web pages mentioning pip, conda, poetry, and who knows what else. But it’s hard to find anything telling them how to winnow that down to get something that will work for their needs. (And a lot of what they can find is junky articles with clickbait headlines like “Why You Should Be Using X NOW!!!” that don’t really provide a cogent analysis of the choices involved.)
In addition, in some of these discussions there have been blurred lines between what I see as three different dimensions of “packaging tools”, one of which has subcategories:
- Installing packages
- Managing environments
- Distributing packages
a. packages that are pure Python (even if they depend on non-pure-Python packages)
b. packages that actually require some non-Python compile/build operation as part of their own build process
My sense is that #3b is the hairiest one, and a lot of discussion has focused on that. But I think this is also the one that affects the smallest number of users. So I would hope that, even if we can’t all agree on recommendations for an all-encompassing build tool, we could still make more progress on concrete recommendations for items 1, 2, and 3a above.
This would certainly be better than nothing. I sort of see the options like this:
- Plan A: Python provides a tool that meets users’ needs
- Plan B: Python doesn’t provide a tool that meets users’ needs, but Python’s official docs do help people find and use third-party tools that meet their needs. (This could include directing them to third-party docs, but in my view it would still mean that the official docs at least include some kind of “feature matrix” or flowchart type thing that guides people to the tool that is best for them, rather than just saying “Here, you go ahead and visit all these links and decide for yourself”.)
- Plan C: Python doesn’t provide a tool that meets users’ needs, and the official docs don’t tell them how to find and use tools that will meet their needs, but at least the official docs tell them up front “We’re not going to help you find and use a tool that meets your needs.”
- Plan D: Python doesn’t provide a tool that meets users’ needs, and doesn’t tell them how to find and use something that will meet their needs, and doesn’t even tell them that’s it not going to do that, but just tells them how to use the tools that Python does provide, whether those meet their needs or not.
We could then crosstab this with the dimensions of packaging I mentioned above (i.e., the “tool” in Plans A-D could be a package installer, or an environment manager, or a build tool).
From my perspective, the current Python packaging documentation is at a level of basically Plan D+ on all dimensions. There are some references to other tools sprinkled in the docs, mostly buried in unobtrusive places. There are almost no acknowledgements that the documentation is only telling people one way to do things, despite the fact that many people choose to use third-party tools because the ones Python provides aren’t good enough (especially, I think, in dimensions #1 and #2).
What you’re suggesting sounds like upgrading everything to Plan C+? I’m not clear on which parts you’re proposing to include in the docs vs. just have linked as an external resource.
I think that would still leave a huge number of users feeling disappointed, though. I’ve not given up hope that we can shoot for at least “Plan 1B+2B+3C” — that is, official documentation that fully incorporates information and recommendations about third-party package installers and environment managers, and at least acknowledges its limitations with regard to build tools.
Finally, although I’ve mentioned this before, in my view the most important about the docs, by orders of magnitude, is the extent to which resources are reachable in a clearly signposted “drill-down” way from docs.python.org. Having a link to some third-party tool shoved at the bottom of an inner doc page, with little or no explanation of what it does or why to use it, is not the same thing as having big text on the top-level “How to install packages” page that says “This page is about X. You may be interested in Y or Z for the following reasons. . . [actual explanation/guide here].”
So all in all I think @lwasser’s idea is a step in the right direction, although not as big a step as I would hope we’d be able to take.