Create a Python registry
Open Registry → Registries, create a registry with the PyPI format, then open its Setup page. The shared PyPI host uses your registry slug as the first path segment. A verified custom domain omits that slug. Use the exact URLs shown in your own setup page.
PyPI registries here are private only. A public package with the same name cannot be substituted for a missing private project. Give the release job a publisher key that can upload to this registry, and give each installer a separate read-only download key.
Publish with twine
- Build a wheel or source distribution with your Python build tool.
- In the registry's Setup page, copy the
.pypircexample for the legacy upload endpoint. Put the publisher key in a secret store or environment variable, not in a committed file. - Run
twine upload --repository private dist/*, then confirm the release under Registry → PyPI projects.
Releases can be yanked or unyanked from the project page. Deleted project names are tombstoned rather than made available to another publisher.
Install with pip, uv or poetry
Copy the client-specific URL from Registry → PyPI projects → Setup. For pip, the index uses the username __token__ and your read-only key as the password. The setup page also provides pip.conf, uv and poetry examples. Keep credentials out of source control and CI logs.
A recipient's key should cover only the projects they need. Rotate or revoke it from the registry's key management page when access changes. Custom-domain verification uses the same DNS ownership flow for PyPI hosts.