* apt is used to install python packages that system packages depend on.
* Users are ---required--- strongly encouraged (see below) to use virtual environments or conda to install python packages for their own usage.
There's:
1) System packages. Any OS with discrete releases should aim for stability, here, to create a useful deployment/support target.
2) User packages that the user plans to use directly. Your web browser, a spreadsheet program, maybe something like ripgrep. You don't need multiple versions, and the version you want is almost always "whatever's latest". This could also, potentially, include your main daemons on a server—SQL servers, web servers, that kind of thing.
3) Development packages. It's common to need multiple versions and to need to switch between them frequently (due to having multiple projects with the same deps at different versions, or needing to "git-bisect" or debug a branch with older deps, that kind of thing). Some overlap with 2 (especially on servers, if only because it's convenient to manage your servers' packages with the same tool you use to manage development dependencies) but they remain distinct categories.
MacOS with Homebrew gives you 1 (macOS itself) and 2 (Homebrew). Some people try to use homebrew for 3, which tends to make them unhappy and leads to them making angry posts about Homebrew because doing that is a bad idea... but it's also a bad idea on most linux distros, which will be mixing together 1-3 if you try to use the system package manager for everything. You should be using something else for #3, at least. You shouldn't be using the system Go or Python packages unless you're targeting that specific distro at that specific major version as a deployment target.
Linux distros tend to have difficulty separating 1 & 2, in large part, I think, because of how the graphics and multimedia stacks work. This is really annoying if you're used to having nice, clean separation between those, as on macOS + Homebrew.
The libraries in distro are for distro packages. Using them is fine but by no means required.
I mention Go because I think it's heading in the same direction on Debian-based distros.
Seems like there would be a better way to keep things straight...