I’m building an open source game engine in pure Python, with Vulkan desktop rendering and
WebGPU export so games run in the browser. The site and demos are up and I’m putting together
the infrastructure for early dev previews. First public preview is about a month out, but a
real release is more like 6 to 12 months away.
The project is split up the usual way into projectname, projectname-core,
projectname-graphics, projectname-editor and a few more. Right now they come off a private
index as 0.0.0.dev### builds, and they pin each other with exact == versions so that an
install is always one matched set, excluding some optional components.
While getting ready for the preview I realised this creates a dependency confusion problem.
My index doesn’t mirror the rest of PyPI, so anyone installing needs PyPI configured for the
other dependencies. Once both indexes are in play pip picks by version across all of them
rather than preferring mine, and none of my component names exist on PyPI yet. So anyone
could register one of those names, publish a higher version than my real builds, and win the
resolution outright, even for a user who pointed the top level package at my index correctly.
I can tell people to use --index-url instead of --extra-index-url, but I can’t control other
people’s configuration. Whoever wins that resolution ends up running their code on my users’
machines, which is the part that actually worries me.
Pending publishers looked like the answer at first, but they don’t reserve a name until the
first actual upload, so they’re no help before you have something to upload.
That leaves uploading minimal placeholder releases under each name, which is what I’d assumed
people do. But PEP 541 lists “package has no functionality or is empty” as name squatting,
and that’s a fair description of a placeholder.
So is there an accepted way to hold component names before you have something real to
publish? And if placeholders are fine, what makes one fine rather than squatting? A module
that actually does something, like printing where to get the real builds? A link back to the
active project with regular dev pre-releases?
I don’t really feel comfortable pushing code out to something as permanent as PyPI until I
have proper infrastructure to ensure quality and security, so I’m in a bit of a bind. This
must come up fairly often for projects that pick up users before they’re ready for a
permanent PyPI release.
Any practical advice would be appreciated.