I've gotten to a point with the abomination code where I need to just, consider what I'll do with it, if anything. I'd like a proper project to mess with it in if I go any further, which means this all comes back to the pip stuff.
For now, I'm going to try to add some context to what I was saying yesterday, because as far as I'm concerned, I'm missing it.
One thing I need is a package that doesn't depend on anything I care about. That way, I can install it along with a constraint, to make sure that the constraint is correctly ignored. For the bulk of the tests, I need packages I can refer to via a URL constraint, which means packages somewhere in the data directory. The most complicated thing I want is URL-referable packages that refer to a requirement by URL. For that, I basically want to throw together various combinations of URL requirement and constraint, and confirm they behave as expected. For that, I need to somehow generate those packages...
So, the first two have plenty of packages in the test index already that look perfect for that.
So, I just need to figure out how to generate a package (check) and refer to it by file URL rather than by name (I'll get back to you). Ah, got it, I just need to not use the scratch path as an index, and instead generate file URLs to its contents. With this, I can also more cleanly create packages that aren't in the index being used. This system is... still a little magic, to be honest, but not quite as magic as I thought.
I think I understand it well enough now to actually write tests, once I collect my thoughts.
Anyway, I'm going to wrap up now and take it easy for a bit. Easy-easy, not "borderline incomprehensible higher-level functions" easy.